HDU 2191 珍惜现在,感恩生活 (多重背包)
2015-06-14 22:08
197 查看
#include<iostream> #include<cstdio> using namespace std; struct rice{ int p; int h; }rice[505]; int max(int a,int b) { return a>b?a:b; } int main() { int t,n,m,p,h,c,i,j,f[101],k; cin>>t; while(t--){ scanf("%d%d",&n,&m); k=0; for(i=0;i<m;i++) { scanf("%d%d%d",&p,&h,&c); j=1; while(j<=c){ rice[k].p = j*p; rice[k++].h=j*h; c-=j; j=j*2; } rice[k].p = c*p; rice[k++].h = c*h; } for(i=0;i<=n;i++) f[i]=0; for(i=0;i<k;i++) for(j=n;j>=rice[i].p;j--) f[j]=max(f[j],f[j-rice[i].p]+rice[i].h); cout<<f <<endl; } return 0; }
原来这就叫多重背包,用二进制把它简化放入rice[]就是01了状态:f[j]:j是所花的经费状态转移:f[j]=max{f[j],f[j-rice[i].p]+rice[i].h}
相关文章推荐
- Java基础之基础语法
- 关于Android四大组件之一Service
- 面向对象程序设计
- vdbench使用
- iOS开发--Objective-C之KVC
- 主从复制
- CMarkup类中的方法说明
- Require.js、Angular.js整合
- HDU 悼念512汶川大地震遇难同胞——老人是真饿了 (贪心)
- Java中的日志——Java.util.logging、log4j、commons-logging
- MySQL各种日期类型与整型(转)
- 磁盘碎片整理程序的原理是什么?
- Android学习8之图片按钮ImageButton
- Python Web.py与AJAX交互
- GEOINT学习(1)
- 记录在四大搜索引擎上检查网站被索引页面的总数
- 15第十五周项目一——用二进制处理学生成绩
- Java中的return语句使用总结
- Linux 网络之IP转换
- (C++)浅谈多态基类析构函数声明为虚函数