【多重背包】HDU2191悼念512汶川大地震遇难同胞——珍惜现在,感恩生活【模板】
2016-04-07 19:17
211 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2191
Problem Description
急!灾区的食物依然短缺!
为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品,其价格不等,并且只能整袋购买。
请问:你用有限的资金最多能采购多少公斤粮食呢?
后记:
人生是一个充满了变数的生命过程,天灾、人祸、病痛是我们生命历程中不可预知的威胁。
月有阴晴圆缺,人有旦夕祸福,未来对于我们而言是一个未知数。那么,我们要做的就应该是珍惜现在,感恩生活——
感谢父母,他们给予我们生命,抚养我们成人;
感谢老师,他们授给我们知识,教我们做人
感谢朋友,他们让我们感受到世界的温暖;
感谢对手,他们令我们不断进取、努力。
同样,我们也要感谢痛苦与艰辛带给我们的财富~
Input
输入数据首先包含一个正整数C,表示有C组测试用例,每组测试用例的第一行是两个整数n和m(1<=n<=100, 1<=m<=100),分别表示经费的金额和大米的种类,然后是m行数据,每行包含3个数p,h和c(1<=p<=20,1<=h<=200,1<=c<=20),分别表示每袋的价格、每袋的重量以及对应种类大米的袋数。
Output
对于每组测试数据,请输出能够购买大米的最多重量,你可以假设经费买不光所有的大米,并且经费你可以不用完。每个实例的输出占一行。
Sample Input
1
8 2
2 100 4
4 100 2
Sample Output
400
代码:
Problem Description
急!灾区的食物依然短缺!
为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品,其价格不等,并且只能整袋购买。
请问:你用有限的资金最多能采购多少公斤粮食呢?
后记:
人生是一个充满了变数的生命过程,天灾、人祸、病痛是我们生命历程中不可预知的威胁。
月有阴晴圆缺,人有旦夕祸福,未来对于我们而言是一个未知数。那么,我们要做的就应该是珍惜现在,感恩生活——
感谢父母,他们给予我们生命,抚养我们成人;
感谢老师,他们授给我们知识,教我们做人
感谢朋友,他们让我们感受到世界的温暖;
感谢对手,他们令我们不断进取、努力。
同样,我们也要感谢痛苦与艰辛带给我们的财富~
Input
输入数据首先包含一个正整数C,表示有C组测试用例,每组测试用例的第一行是两个整数n和m(1<=n<=100, 1<=m<=100),分别表示经费的金额和大米的种类,然后是m行数据,每行包含3个数p,h和c(1<=p<=20,1<=h<=200,1<=c<=20),分别表示每袋的价格、每袋的重量以及对应种类大米的袋数。
Output
对于每组测试数据,请输出能够购买大米的最多重量,你可以假设经费买不光所有的大米,并且经费你可以不用完。每个实例的输出占一行。
Sample Input
1
8 2
2 100 4
4 100 2
Sample Output
400
代码:
#include<iostream> #include<algorithm> #include<cstring> using namespace std; int c[105],w[105],k[105]; int f[105]; int n,m; void ZeroOnePack(int c,int w) // 01 { for(int i=m;i>=c;i--) f[i]=max(f[i],f[i-c]+w); } void CompletePack(int c,int w) // 完全背包; { for(int i=c;i<=m;i++) f[i]=max(f[i],f[i-c]+w); } void MultipletePack(int c,int w,int cnt) { if(cnt*c>=m){ CompletePack(c,w); return ; }else{ int k=1; while(k<=cnt){ ZeroOnePack(k*c,k*w); cnt-=k; k<<1; } ZeroOnePack(cnt*c,cnt*w); } } int main() { int t; cin>>t; while(t--){ memset(f,0,sizeof(f)); // 初始化; cin>>m>>n; for(int i=0;i<n;i++){ cin>>c[i]>>w[i]>>k[i]; MultipletePack(c[i],w[i],k[i]); // 判断是使用01还是完全背包; } cout<<f[m]<<endl; } return 0; }
相关文章推荐
- [BZOJ2132]圈地计划(最小割)
- apache跨域问题
- 脱离 Spring 实现复杂嵌套事务,之三(REQUIRES_NEW - 独立事务)
- 脱离 Spring 实现复杂嵌套事务,之四(NESTED - 嵌套事务)
- C++实现——由年月日推算是星期几
- C# 网络编程之基于SMTP发送电子邮件
- Android官方开发文档Training系列课程中文版:通过NFC共享文件之发送文件到另一台设备
- 剑指offer-面试题2.实例Singleton模式
- [UOJ35]后缀排序
- ssh 登录出现的几种错误以及解决办法
- 脱离 Spring 实现复杂嵌套事务,之二(REQUIRED - 加入已有事务)
- 链表--单链表
- 问卷
- does not match bootstrap parameter
- 4.8 团队分析
- 脱离 Spring 实现复杂嵌套事务,之一(必要的概念)
- JavaScript之流程控制
- MySQL性能优化的21个最佳实践 和 mysql使用索引
- 剑指offer面试题 圆圈中最后剩下的数字(约瑟夫环问题)
- 九度OJ1184二叉树