九度OJ-1454,1455-Piggy-Bank,珍惜现在,感恩生活
来源:互联网 发布:.net与java的区别 编辑:程序博客网 时间:2024/04/28 18:55
http://ac.jobdu.com/problem.php?pid=1454
http://ac.jobdu.com/problem.php?pid=1455
这里想对背包问题做一个小总结。1454即完全背包问题,即某个“物品”可以取无限次,其次,背包需要正好装满。
背包正好装满的解决方式,只是改变初始值,而物品可以“无限次取”,是将01背包倒序改变dp[j]变为正序。如下:
for(j=1;j<=weight;j++){dp[j]=INT_MAX;}
for(i=1;i<=n;i++){for(j=coin[i].w;j<=weight;j++){if(dp[j-coin[i].w]!=INT_MAX)dp[j]=min(dp[j-coin[i].w]+coin[i].v,dp[j]);}}1455是多重背包,每种物品最多可以选ki次,可以将其变成ki个物品,或者log2ki个物品。如下:
ki:
for(i=0;i<kind;i++){scanf("%d%d%d",&p,&h,&c);while(c--){dami[count].w=p;dami[count].v=h;count++;}}log2ki:
for(i=1;i<=n;i++){scanf("%d%d%d",&p,&h,&c);k=1;while(1){//dami[count].v=h*k;dami[count].w=p*k;count++;c-=k;if(c>=k*2){k*=2;}else if(c>0){k=c;}elsebreak;}}然后按01背包处理即可。
log2ki方式我犯过一个错误:
for(i=1;i<=n;i++){scanf("%d%d%d",&p,&h,&c);k=1;while(1){//dami[count].v=h*k;dami[count].w=p*k;c-=k;if(c>=k*2){k*=2;}else if(c>0){k=c;}elsebreak;count++;}}注意count++在最后失效,影响了作为统计数量的作用。
另外强调一下,弄清楚正序和倒序。倒序是01,正序是完全。多重背包转换成01,当然需要倒序了。
0 0
- 九度OJ-1454,1455-Piggy-Bank,珍惜现在,感恩生活
- 九度OJ 1455: 珍惜现在,感恩生活
- 九度oj 题目1455:珍惜现在,感恩生活
- 九度OJ 1455 珍惜现在,感恩生活 (多重背包)
- 九度OJ 1455 珍惜现在,感恩生活 -- 动态规划(背包问题)
- 九度笔记之 1455:珍惜现在,感恩生活
- 九度OJ 教程103 广搜解决《珍惜现在,感恩生活》之内存超
- 九度oj 题目1454:Piggy-Bank
- 珍惜现在,感恩生活
- 题目1455:珍惜现在,感恩生活
- 题目1455:珍惜现在,感恩生活
- 题目1455:珍惜现在,感恩生活
- 杭电OJ 2191:珍惜现在,感恩生活
- 九度OJ 1454 Piggy-Bank(完全背包)
- DP:珍惜现在,感恩生活
- [hdu2191]珍惜现在,感恩生活
- hdu 2191 珍惜现在,感恩生活
- 题目103:珍惜现在,感恩生活
- 如何使用 CoCreateGUID API 生成与 VB 6 的 GUID
- 经纬张颖拉创业者垫背?VC还没到如此下贱的地步
- 求二进制数中1的个数
- [GEiv]第七章:着色器 高效的GPU渲染方案
- 控制台是什么,控制台效果图展示
- 九度OJ-1454,1455-Piggy-Bank,珍惜现在,感恩生活
- 老项目在Xcode6调试运行时报错的问题(App installation failed).
- Cognos函数(十九) - rank异常:GEN-ERR-0016 “rank”函数在已使用该函数的上下文中不受支持。
- jsp乱码及java后台乱码问题
- 苹果的改变和"阳谋"——被吐槽不断的iOS8
- Android 如何将Canvas上绘制的内容保存成本地图片
- linux下memcached安装以及启动
- “转化率”在不增加预算的情况下获得更高的营销收益
- “转化率”在不增加预算的情况下获得更高的营销收益