hdu 4091 Zombie’s Treasure Chest 贪心+枚举
2013-10-05 13:11
399 查看
题意:
输入背包体积n,绿宝石体积s1,价值v1,蓝宝石体积s2,价值v2,宝石数目无限,问背包里能放下的最大价值?
题解:
看过去很像完全背包,可数据很大(虽然没给出,也能猜到,不然太水了),所以不能用背包求。又只有两种物品,想到了贪心,将价值与体积比大(称为价值比)的优先放入。但体积限制,这样还不可以,还需要枚举减少价值比大的宝石个数,是否可以增大所求价值。又我们可以知道对于体积是m=lcm(s1,s2)背包,肯定全选价值比大的。所以至多只要枚举n-n/m+m的体积。如果小于这个值,存在大于m的空余,这个空余肯定用价值大的放置。
注意:
1.不够一个公倍数的时候,计算需要小心。。我就出错了。。
2.枚举的时候,跨度选择max(s1,s2),这个算是优化吧,没有的话会TLE
耗时:0MS/1000MS
输入背包体积n,绿宝石体积s1,价值v1,蓝宝石体积s2,价值v2,宝石数目无限,问背包里能放下的最大价值?
题解:
看过去很像完全背包,可数据很大(虽然没给出,也能猜到,不然太水了),所以不能用背包求。又只有两种物品,想到了贪心,将价值与体积比大(称为价值比)的优先放入。但体积限制,这样还不可以,还需要枚举减少价值比大的宝石个数,是否可以增大所求价值。又我们可以知道对于体积是m=lcm(s1,s2)背包,肯定全选价值比大的。所以至多只要枚举n-n/m+m的体积。如果小于这个值,存在大于m的空余,这个空余肯定用价值大的放置。
注意:
1.不够一个公倍数的时候,计算需要小心。。我就出错了。。
2.枚举的时候,跨度选择max(s1,s2),这个算是优化吧,没有的话会TLE
耗时:0MS/1000MS
#include <cstdio> #include <cstring> #include <cmath> #include <iostream> #include <algorithm> using namespace std; typedef __int64 LL; LL gcd(LL a,LL b) { return b==0?a:gcd(b,a%b); } LL lcm(LL a,LL b) { return a/gcd(a,b)*b; } int main() { LL n,s1,v1,s2,v2; LL T,tt=0; cin>>T; while(T--) { LL i,j,k,ans,p,q,m,num; cin>>n>>s1>>v1>>s2>>v2; m=lcm(s1,s2); num=n/m; if(num){num--;} if(v1*s2>=v2*s1) { num=m/s1*num; p=(n-num*s1)/s2; ans=num*v1+p*v2; if(s1>=s2) { for(i=num;i*s1<=n;i++) { q=i*v1+(n-i*s1)/s2*v2; if(q>ans)ans=q; } } else { for(i=p;i>=0;i--) { q=i*v2+(n-i*s2)/s1*v1; if(q>ans)ans=q; } } } else { num=m/s2*num; p=(n-num*s2)/s1; ans=num*v2+p*v1; if(s2>=s1) { for(i=num;i*s2<=n;i++) { q=i*v2+(n-i*s2)/s1*v1; if(q>ans)ans=q; } } else { for(i=p;i>=0;i--) { q=i*v1+(n-i*s1)/s2*v2; if(q>ans)ans=q; } } } cout<<"Case #"<<++tt<<": "<<ans<<endl; } return 0; }
相关文章推荐
- C#中对象,字符串,dataTable、DataReader、DataSet,对象集合转换成Json字符串方法。
- poj 2762 Going from u to v or from v to u?(强连通、缩点、拓扑)
- 【ATT】Recover Binary Search Tree
- tomcat内存溢出配置
- ORACLE密码认证方式
- Oracle DB RMAN 简单配置
- Linux Live USB Creator 简体中文版 – 在Windows中用U盘运行Linux
- 封装异常处理的read和write函数
- CF#204DIV2:A. Jeff and Digits
- c语言数组--插入排序
- 数据结构-线性表-顺序存储结构完整可执行代码
- Linux shell各自符合简单介绍
- IE条件注释
- 20131005国庆作业5-5,5-6,5-7
- 打印sin函数
- 9月收藏
- vim配置
- 第三章8
- Uva - 12304 - 2D Geometry 110 in 1!
- Android系列学习讲座之六--App模块化及工程扩展