一点点随笔

字符串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]); } }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值