https://blog.csdn.net/jc514984625/article/details/51803842
题目大意:

你有一个体积为N的箱子和两种数量无限的宝物。宝物1的体积为S1,价值为V1;宝物2的体积为S2,价值为V2。输入均为32位带符号的整数。你的任务是最多能装多少价值的宝物?

我首先想到完全背包,后来RE才发现数组开不下,要用枚举,参看了上面网址的这篇博客。

方法:其实也没那么不好想,关键是要冷静下来一步步分析,如何降低枚举的数量。首先立马想到的肯定是性价比高的先装,但问题是会有剩余空间,使得这样的贪心策略并不是最优的。假设我们现在已经满足s1v2<=s2v1,也就是说物品1性价比不会比物品2的小。那么设最终物品1选n1件,物品2选n2件我们得到的等式就是ans=n1v1+n2v2。此时显然有物品2的数量不会超过s1,(否则这s1个物品2的空间放物品1的价值为s2*v1更优),同时n2自身不会超过n/s2,对于s1<=s2的情况下显然复杂度在sqrt(n)之下;对于s1>s2时显然只能枚举物品1的数量了,首先由于物品1性价比高,所以我们不妨先全选了,然后再枚举要拿出多少物品1放物品2可取到最优解,那么显然同样我们能拿出的物品数不会超过s2,同时总的拿出的物品数不会大于n/s1,故复杂度仍然在sqrt(n)之下。这样问题就解决了。
本题有个有个降低枚举量的方法,即判断S1,S2的大小关系后再进行枚举但当S1,S2都很小的则用到下面一种枚举方法:

对于宝物1和2,当所占体积为S1S2时,分别能够提供的价值为S2V1和S1V2,我们便可以根据两者的大小关系判断选哪一种物品,如果S2V1>=S1*V2,则我们可以得出宝物的数量最多为S1-1,因为如果我们选了S1件宝物2,则我们完全可以用S2件宝物1去代替,而且我们获得价值会更大。因此每次可以枚举min(S1-1,cnt2)或者min(S2-1,cnt1)便可以得出答案。

#include <cstdio>
#include <cstring>
#include <algorithm>using namespace std;typedef long long LL;int main()
{int T; scanf("%d\n",&T);int kase = 1; int n,s1,v1,s2,v2;while( T-- ) {scanf("%d %d %d %d %d",&n,&s1,&v1,&s2,&v2 );if( s1>s2 ) {swap( s1,s2); swap(v1,v2);}LL value = 0;if( n/s2>=65536 ) {for( LL i=0; i<=s1; ++i ) value = max( value , i*v2 + (n-i*s2)/s1 * v1 );for( LL i=0; i<=s2; ++i ) value = max( value , i*v1 + (n-i*s1)/s2 * v2 );}else {for( LL i=0; i*s2<=n; ++i ) value = max( value , i*v2 + (n-i*s2)/s1 * v1 );}printf("Case #%d: %lld\n",kase++,value );}return 0;
}

UVa-12325宝箱相关推荐

  1. UVA 12325 宝箱 Zombie‘s Treasure Chest

    宝箱 Zombie's Treasure Chest 题面翻译 你有一个体积为N的箱子和两种数量无限的宝物.宝物1的体积为S1,价值为V1::宝物2的体积为S2,价值为V2.输入均为32位带符号整数. ...

  2. uva 12325 宝箱

    书中的分类枚举法一举克服了普通枚举最大10^9的规模:第一种宝藏最多n/s1个,所以宝藏1的数量可以从1枚举到n/s1,同时算出宝藏2最多多少个,求出总价值.宝藏2最多n/s1个,枚举方法同上.因此如 ...

  3. uva 12325(宝箱, 枚举问题);

    题目大意: 你有一个体积为N的箱子和两种数量无限的宝物,宝物1的体积为s1,价值为v1; 宝物2的体积为s2, 价值为v2.  输入均为32位带符号整数.你的任务是计算最多能够装多大的宝物. 题目分析 ...

  4. UVA - 12325 Zombie's Treasure Chest 暴力

    根据两种情况 选择不同枚举 哇!  这题开始用 int 类型的数写的,只有 存最大 价值量的 mix_ 用了long long ,结果交了一遍 wa ,查了一遍 没问题啊?? 后来意识到 max 函数 ...

  5. 【例题 7-11 UVA - 12325】Zombie's Treasure Chest

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 1.N/s1 < 1e6 枚举1的个数 2.N/s2<1e6 枚举2的个数 3.s1和s2的值较小 假设买了s2个1和s ...

  6. Uva 12325 Zombie's Treasure Chest (贪心,分类讨论)

    题意: 你有一个体积为N的箱子和两种数量无限的宝物.宝物1的体积为S1,价值为V1:宝物2的体积为S2,价值为V2.输入均为32位带符号的整数.你的任务是最多能装多少价值的宝物? 分析: 分类枚举, ...

  7. UVA 12325 Zombie's Treasure Chest

    题目大意: 你有一个体积为N的箱子和两种数量无限的宝物.宝物1的体积为S1,价值为V1:宝物2的体积为S2,价值为V2.输入均为32位带符号的整数.你的任务是最多能装多少价值的宝物? 对于宝物1和2, ...

  8. UVa 12325 - Zombie's Treasure Chest(暴力枚举+预处理)

    给出背包大小n,两种宝物的体积s1.s2,两种宝物的价值v1.v2.求能装下的最大价值. 首先进行预处理,使n/s1的值尽可能小,满足O(n)的时间不超时.s2的宝物1与s1个宝物2体积相同,所以s= ...

  9. 7.7 竞赛题目选讲

    7.7 竞赛题目选讲 题目可能有些难,请阅读完前面的篇章后,选择是否进行阅读. 7-11 宝箱 (UVA 12325) 你有一个体积为N的箱子和两种数量无限的宝物.宝物1的体积为S1,价值为V1:宝物 ...

  10. 紫书《算法竞赛入门经典》

    紫书<算法竞赛入门经典>题目一览 第3章 数组和字符串(例题) UVA 272 TEX Quotes UVA 10082 WERTYU UVA 401 Palindromes UVA 34 ...

最新文章

  1. 比较全面的L1和L2正则化的解释
  2. arm64的适配问题,这次真醉了
  3. VS单步调试乘法语句时报错:“没有可用于当前位置的源代码”的原因
  4. System.currentTimeMillis()存在性能问题
  5. python编程入门课_程序设计入门—Python
  6. CVPR2019 Oral!伯克利、麻省理工GAN图像合成最新成果(附开源代码)!
  7. VIP 时代,详解会员营销系统架构技术实践!
  8. 基于原生js的图片延迟加载
  9. sms 2003 Service Pack 3 Open Beta
  10. 英特尔“Beach”图片泄露 Optane SSD路线图成关注焦点
  11. python入门--斐波那契数列
  12. guid会重复么_饿了么请你考虑一下消费者
  13. 线程和Application.DoEvents()
  14. 爬虫之抽屉新热榜点赞基本示例
  15. python数据整理--绘图工具matplotlib
  16. Latex中将图例(图1:)改为(图1-1)
  17. 网络爬虫学习软件篇-Python(一)下载安装(超详细教程,傻瓜式说明)
  18. PARSEC benchmark下载
  19. ios打包证书申请流程
  20. 万字长文读懂SaaS的中国版图、问题及趋势

热门文章

  1. 网站设计系列:网站易用性
  2. 说一说递归里的return返回!!!
  3. python 实现udp通信
  4. redis实现单点登录系统
  5. bzoj2876: [Noi2012]骑行川藏 :拉格朗日乘数法
  6. 自动关闭MessageBox
  7. 亚马逊云服务(AWS)中国宁夏及北京区域正式上线Amazon SageMaker
  8. 您的云,您做主:Google Distributed Cloud Hosted 全面可用
  9. 比较不错的资源搜索网站
  10. Android开发,登录注册界面中如何添加视频背景,亲测可用