UVA 12325 Zombie's Treasure Chest
题目大意:
你有一个体积为N的箱子和两种数量无限的宝物。宝物1的体积为S1,价值为V1;宝物2的体积为S2,价值为V2。输入均为32位带符号的整数。你的任务是最多能装多少价值的宝物?
对于宝物1和2,当所占体积为S1*S2时,分别能够提供的价值为S2*V1和S1*V2,我们便可以根据两者的大小关系判断选哪一种物品,如果S2*V1>=S1*V2,则我们可以得出宝物的数量最多为S1-1,因为如果我们选了S1件宝物2,则我们完全可以用S2件宝物1去代替,而且我们获得价值会更大。因此每次可以枚举min(S1-1,cnt2)或者min(S2-1,cnt1)便可以得出答案。
另外书上提出了分类枚举的方法,我们可以根据S1和S2的范围大小而采取不同的枚举方法。
方法1代码:
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;int main() {//freopen("aa.in", "r", stdin);int T;ll N, S1, V1, S2, V2;ll ans ;ll cnt1, cnt2;int kcase = 0;cin >> T;while(T--) {kcase++;cin >> N >> S1 >> V1 >> S2 >> V2;cnt1 = N / S1;cnt2 = N / S2;ans = 0;if(V1 * S2 >= V2 * S1) {for(int i = 0; i <= min(S1 - 1, cnt2); ++i) {ll t = V2 * i + (N - S2 * i) / S1 * V1;if(ans < t) {ans = t;}}} else {for(int i = 0; i <= min(S2-1, cnt1); ++i) {ll t = V1 * i + (N - S1 * i) / S2 * V2;if(ans < t) {ans = t;}}}cout << "Case #" << kcase << ": " << ans << endl;}return 0;
}
方法2代码:
/*
int main() {//freopen("aa.in", "r", stdin);int T;ll N, S1, V1, S2, V2;ll ans = 0;ll cnt1, cnt2;int kcase = 0;cin >> T;while(T--) {kcase++;cin >> N >> S1 >> V1 >> S2 >> V2;cnt1 = N / S1;cnt2 = N / S2;ans = 0;if(S1 >= 100000) {for(int i = 0; i <= cnt1; ++i) {ll t = V1 * i + (N - S1 * i) / S2 * V2;if(ans < t) {ans = t;}}} else if(S2 >= 100000) {for(int i = 0; i <= cnt2; ++i) {ll t = V2 * i + (N - S2 * i) / S1 * V1;if(ans < t) {ans = t;}}} else {if(S2 * V1 >= S1 * V2) {for(int i = 0; i <= min(S1 - 1, cnt2); ++i) {ll t = V2 * i + (N - S2 * i) / S1 * V1;if(ans < t) {ans = t;}}} else {for(int i = 0; i <= min(S2 - 1, cnt1); ++i) {ll t = V1 * i + (N - S1 * i) / S2 * V2;if(ans < t) {ans = t;}}}}cout << "Case #" << kcase << ": " << ans << endl;}return 0;
}
*/
UVA 12325 Zombie's Treasure Chest相关推荐
- UVA - 12325 Zombie's Treasure Chest 暴力
根据两种情况 选择不同枚举 哇! 这题开始用 int 类型的数写的,只有 存最大 价值量的 mix_ 用了long long ,结果交了一遍 wa ,查了一遍 没问题啊?? 后来意识到 max 函数 ...
- Uva 12325 Zombie's Treasure Chest (贪心,分类讨论)
题意: 你有一个体积为N的箱子和两种数量无限的宝物.宝物1的体积为S1,价值为V1:宝物2的体积为S2,价值为V2.输入均为32位带符号的整数.你的任务是最多能装多少价值的宝物? 分析: 分类枚举, ...
- UVa 12325 - Zombie's Treasure Chest(暴力枚举+预处理)
给出背包大小n,两种宝物的体积s1.s2,两种宝物的价值v1.v2.求能装下的最大价值. 首先进行预处理,使n/s1的值尽可能小,满足O(n)的时间不超时.s2的宝物1与s1个宝物2体积相同,所以s= ...
- UVa12325 12325 - Zombie‘s Treasure Chest(思路+代码)
题意: 给定一个容积为n的箱子,装两种宝物,每一种宝物有数量s和价值v这两个参数,问如何装才能使价值最大(输入均为32位带符号的整数) 思路 一开始肯定会想到贪心来找性价比高的,但是举个例子(n=10 ...
- UVA 12325 宝箱 Zombie‘s Treasure Chest
宝箱 Zombie's Treasure Chest 题面翻译 你有一个体积为N的箱子和两种数量无限的宝物.宝物1的体积为S1,价值为V1::宝物2的体积为S2,价值为V2.输入均为32位带符号整数. ...
- Uva12325 Zombie's Treasure Chest [二分区间+模拟退火]
Zombie's Treasure Chest 题目链接 https://cn.vjudge.net/problem/UVA-12325 题意 两种物品无穷多个,第一种物品重量s1s_1s1,价值v ...
- 【例题 7-11 UVA - 12325】Zombie's Treasure Chest
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 1.N/s1 < 1e6 枚举1的个数 2.N/s2<1e6 枚举2的个数 3.s1和s2的值较小 假设买了s2个1和s ...
- BZOJ2490 Zombie’s Treasure Chest
如果n = lcm(s1, s2),那么就可以直接得到maxV = (v / s1 * v1, v / s2 *v2) 然后还剩下一点体积我们暴力枚举用s1的量,让s1为max(s1, s2)可以减少 ...
- bzoj2101【Usaco2010 Dec】Treasure Chest 藏宝箱
2101: [Usaco2010 Dec]Treasure Chest 藏宝箱 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 418 Solved: ...
最新文章
- LeetCode简单题之数组中第 K 个独一无二的字符串
- 在 Kubuntu 21.04 中安装和升级 KDE Plasma 5.2
- redis(二)redis实战 使用redis进行文章的排序
- php mysql 主从复制_Windows 环境下,MySQL 的主从复制和主主复制
- HNUOJ 13341
- mysql5.6的安装步骤_MySQL5.6安装步骤
- js数字累加 · 递增动画 - 封装篇
- html js url 跳转页面内容,js跳转页面方法总结
- Qt 互斥量 QMutex
- 对jfinal中enjoy的理解
- 操作系统和绿色软件下载网址
- es 安装 ik 分词器
- 浙江大学_包家立教授计算生物学2_信源编码理论
- 【转载】国产手机MTK平台MRP软件应用安装大全
- 蛙人高频交易拆单策略—蛙人高频软件结构及使用说明
- codeforces 1077E Thematic Contests
- 干货 | 七年留美经验,帮你省钱自助游美国
- Java 近百万数据查询和导出共用时2分钟左右
- python 批量替换当前.txt文本内容
- macbook 安装iperf_【优秀的网络性能测量工具----Iperf】-Linux/Unix/MAC OSX操作系统论坛-ZOL中关村在线...