字符串hash和背包的知识点随笔:
1.字符串哈希:
1.要点:开unsigned long long 不然包爆栈的
2.核心计算式:

注:此处的i应该从字符串(数组)的第二个位置开始遍历
2.背包问题:
1.01背包:物品只有拿/不拿两种选择,背包空间m,求能拿的最大/最小价值:
代码样例:(空间/时间优化后):
for(int i=1;i<=n;i++){
cin>>wi,vi;
for(int j=m;j>=wi;j--){
dp[j]=max/min(dp[j],dp[j-wi]+vi);//进行擂台角逐,取最大/最小的
}
}
注:如果在此基础上依然超时,建议使用scanf输入,printf输出以减少时间复杂度
2.多重背包:有n件物品,其中第i件物品有m个
代码样例:
for(int i=1;i<=N;i++){ for(int j=V;j>=c[i];j--){ for(int k=1;k<=n[i];k++){ if(j>=c[i]k) dp[j]=max(dp[j],dp[j-c[i]k]+k*w[i]); } } }
3.完全背包:以共有n件物品,每件物品的数量不限
代码示例:
for(int i=1;i<=N;i++){ for(int j=c[i];j<=V;j++){ dp[j]=max(dp[j],dp[j-c[i]]+w[i]); } }
490

被折叠的 条评论
为什么被折叠?



