随笔分类 - dp
动态规划总结
摘要:01背包 有 N 件物品和一个容量为 V的背包。放入第 i件物品花费的费用是 c [ i ],得到的价值是 w [ i ] ,求将哪些物品装入背包可使价值总和最大。 for (int i = 1; i <= n; i++) for (int j = V; j >= c[i]; j--) f[j]
阅读全文
摘要:最长上升子序列 NlogN hdu 1950 # include <bits/stdc++.h>using namespace std;const int MAXN=2e6+100;int a[MAXN],dp[MAXN];//vector<int> ans;int main(){ int T;
阅读全文
摘要:子集生成 1.该数二进制的所有组合的集合 # include <bits/stdc++.h>using namespace std;int a[20],v[1<<16],dp[1<<16];int dfs(int s,int now){ if(dp[s]) return dp[s]; int an
阅读全文
摘要:字符集为2——过河卒变形 此模型多用于01串、括号串,这种字符集为2的字符串,最好它的个数再给定 1)把01串转化为图上的往右走或者往上走,个数为先限制的图的长宽 2)前缀和后缀可以转化为图上的权值 3)固定的字符可以转化为某个点固定下一步的方向 装化为过河卒问题 eg:牛63 D # includ
阅读全文
摘要:斜率优化 1.费用提前计算 O(N^2) # include <bits/stdc++.h>using namespace std;typedef long long LL;const int MAXN=5e3+100;LL f[MAXN],sumt[MAXN],sumc[MAXN];int N,
阅读全文
摘要:状压DP //一维dp:糖果【蓝桥杯省赛】# include <bits/stdc++.h>using namespace std;const int MAXN=1<<21;int dp[MAXN],s[110];int main(){ memset(dp,-1,sizeof(dp)); int
阅读全文
摘要:倍增优化的DP # include <bits/stdc++.h>using namespace std;typedef long long LL;string s1,s2;int n1,n2;LL f[105][32];int main(){ while(cin>>s2>>n2>>s1>>n1)
阅读全文
摘要:单调队列优化的DP k递增,calc递减的单调队列 # include <bits/stdc++.h>using namespace std;struct rec{ int L,P,S; } a[110];int N,M,f[110][16010],q[16010];bool operator <
阅读全文
摘要:数据结构优化的DP # include <bits/stdc++.h>using namespace std;const int mod=1e9+7;const int MAXN=1e3+100;int T,N,M;int f[MAXN][MAXN],a[MAXN],c[MAXN],aa[MAXN
阅读全文
摘要:1、一维状压DP糖果【蓝桥杯省赛】```cpp//糖果【蓝桥杯省赛】# include <bits/stdc++.h>using namespace std;const int MAXN=1<<21;int dp[MAXN],s[110];int main(){ memset(dp,-1,sizeo
阅读全文