题意:给两种宝石,体积S1,S2,价值V1,V2,背包容量n,求最大收益。 所有数据都在32位整数范围内。

思路:只有两种物品的背包,显然不是常见的背包,应该从背包之外的思路下手。

1:可以猜想其中一个是数量少于1e5,暴力求,然后过了。

2:分类处理数据: 如果有物品体积>=sqrt(N),那么可以枚举它的数量[0,N/S];

不然,对于性价比低的那一个,它的数量t,和性价比高的那个的体积S的关系是t<=S。

#include<bits/stdc++.h>
#define s first
#define e second
#define rep(i,a,b) for(ll i=a;i<=b;i++)
#define rep2(i,a,b) for(int i=a;i>=b;i--)
#define ll long long
using namespace std;
int main()
{
int T,C=; ll S,S1,V1,S2,V2,ans;
scanf("%d",&T);
while(T--){
scanf("%lld%lld%lld%lld%lld",&S,&S1,&V1,&S2,&V2);
printf("Case #%d: ",++C); ans=;
if(S1<=S2&&V1>=V2) ans=max(ans,(S/S1)*V1);
if(S2<=S1&&V2>=V1) ans=max(ans,(S/S2)*V2);
if(S1*S1>=S){
rep(i,,S/S1)
ans=max(ans,V1*i+(S-S1*i)/S2*V2);
}
if(S2*S2>=S){
rep(i,,S/S2)
ans=max(ans,V2*i+(S-S2*i)/S1*V1);
}
if(S1*S1<S&&S2*S2<S){
rep(i,,max(S1,S2)){
if(S>=S1*i) ans=max(ans,V1*i+(S-S1*i)/S2*V2);
if(S>=S2*i) ans=max(ans,V2*i+(S-S2*i)/S1*V1);
}
}
printf("%lld\n",ans);
}
return ;
}

HDU4091:Zombie’s Treasure Chest (分类-数学)的更多相关文章

  1. UVa 12325 - Zombie's Treasure Chest-[分类枚举]

    12325 Zombie’s Treasure Chest Some brave warriors come to a lost village. They are very lucky and fi ...

  2. G - Zombie’s Treasure Chest(动态规划专项)

    G - Zombie’s Treasure Chest Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d &am ...

  3. 一道看似dp实则暴力的题 Zombie's Treasure Chest

     Zombie's Treasure Chest 本题题意:有一个给定容量的大箱子,此箱子只能装蓝宝石和绿宝石,假设蓝绿宝石的数量无限,给定蓝绿宝石的大小和价值,要求是获得最大的价值 题解:本题看似是 ...

  4. HDU 4091 Zombie’s Treasure Chest 分析 难度:1

    Zombie’s Treasure Chest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/ ...

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

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

  6. hdu 4091 Zombie’s Treasure Chest(数学规律+枚举)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4091 /** 这题的一种思路就是枚举了: 基于这样一个事实:求出lcm = lcm(s1,s2), n ...

  7. UVA - 12325 Zombie's Treasure Chest (分类搜索)

    题目: 有一个体积为N的箱子和两种数量无限的宝物.宝物1的体积为S1,价值为V1:宝物2的体积为S2,价值为V2.输入均为32位带符号整数.计算最多能装多大价值的宝物,每种宝物都必须拿非负整数个. 思 ...

  8. uva 12325 Zombie's Treasure Chest

    https://vjudge.net/problem/UVA-12325 题意: 一个箱子,体积为N 两种宝物,体积为S1.S2,价值为V1.V2,数量无限 最多装多少价值的宝物 数据范围:2^32 ...

  9. BZOJ2490 Zombie’s Treasure Chest

    如果n = lcm(s1, s2),那么就可以直接得到maxV = (v / s1 * v1, v / s2 *v2) 然后还剩下一点体积我们暴力枚举用s1的量,让s1为max(s1, s2)可以减少 ...

随机推荐

  1. spark 开启job history

    1.首先需要创建spark.history.fs.logDirectory hadoop fs -mkdir hdfs://ns1:9000/user/hadoop/logs 2.修改hadoop-d ...

  2. 【JavaScript】从 this 指向到 reference 类型

    判断"this 指向谁"是个老大难的问题. 网络上有许多文章教我们如何判别,但大多艰涩复杂,难以理解. 那么这里介绍一个非常简单实用的判别规则: 1)在函数[调用]时," ...

  3. log4j重复打印的解决方法

    log4j的logger(旧版本称logger)是层次结构的,子logger会继承父logger的属性,appender也是可继承的属性,这常常 容易导致配置错误而引起的log4j输出重复的log信息 ...

  4. stm32f103c8串口USART1发送多一字节

    用UART写了一段Bootloader代码,遇到了一个很奇怪的现象. 代码如下:简单介绍一下就是先统一配置MCU的IO端口,然后配置串口参数,然后循环发送‘0’和'\r’.16进制是0x30 0x0d ...

  5. golang执行命令行(一)

    golang中会经常遇到要 fork 子进程的需求.go 标准库为我们封装了 os/exec标准包,当我们要运行外部命令时应该优先使用这个库. 执行 command 这里我简单结合context 和 ...

  6. 微信配置JS接口安全域名问题-Nginx配置

    1.将下载的txt文件放入/usr/local/nginx/html/目录下面. 2.修改nginx.cong配置文件中的location标签 location / { root html; inde ...

  7. CLRS10.1-7练习 - 用双队列实现栈

    算法中心思想: 始终向非空队列进行入队操作 初始化时两个队列都为空,我们对q1进行入队操作 入栈: 只需执行其中一个队列入队操作即可, 具体操作哪一个队列,用一个标记变量标记 出栈流程图 代码实现 p ...

  8. Idea中类实现Serializable接口 引入 serialVersionUID

    idea实现Serializable接口,然后打出serialVersionUID的办法 setting>editor>Inspection>Java>Serializatio ...

  9. QRCode.js:使用 JavaScript 生成微信二维码

    https://www.runoob.com/w3cnote/javascript-qrcodejs-library.html 什么是 QRCode.js? QRCode.js 是一个用于生成二维码的 ...

  10. ArcGIS Engine开发鹰眼图的功能(基础篇)

    鹰眼是用于调节全视域范围内主地图显示范围情况的副地图.它体现了地图整体与详细局部的关系. 用户可以通过鼠标单击或者画框等动作实现鹰眼与主地图的交互情况. 鹰眼功能的原理是通过主地图窗口的地图控件和鹰眼 ...