枚举--UVA - 12325 Zombie's Treasure Chest
2015-11-01 15:33
239 查看
分析:直接枚举会超时,我们可以分情况讨论:
1、s1 s2都很小,易知选择s1个2和选择s2个1的体积是一样的,但是value分别为 s2*v1 s1*v2,当前者大于后者时,显然要尽可能多的选择1,此时2的个数最多只有s1-1个,因为当2选择了s1个时,还不如选1个1;前小于后同理。这是枚举s
2、s1 s2较大,选择的个数都很小,可以对选择个数枚举。
1、s1 s2都很小,易知选择s1个2和选择s2个1的体积是一样的,但是value分别为 s2*v1 s1*v2,当前者大于后者时,显然要尽可能多的选择1,此时2的个数最多只有s1-1个,因为当2选择了s1个时,还不如选1个1;前小于后同理。这是枚举s
2、s1 s2较大,选择的个数都很小,可以对选择个数枚举。
#include <cstdio> #include <algorithm> using namespace std; typedef long long LL; int main() { int T, kase = 0, n, s1, v1, s2, v2; scanf("%d", &T); while(T--) { scanf("%d%d%d%d%d", &n, &s1, &v1, &s2, &v2); if(s1 > s2) { swap(s1, s2); swap(v1, v2); } LL ans = 0; if(n/s2 > 65536) { for(LL i=0; i<s2; i++) ans = max(ans, i*v1 + (n-i*s1)/s2*v2); for(LL i=0; i<s1; i++) ans = max(ans, i*v2 + (n-i*s2)/s1*v1); } else { for(LL i=0; s2*i<=n; i++) ans = max(ans, i*v2 + (n-i*s2)/s1*v1); } printf("Case #%d: %lld\n", ++kase, ans); } return 0; }
相关文章推荐
- 分布式服务框架Zookeeper
- mysql基础1
- IoC容器实例化Bean三种方式
- [leetcode] Serialize and Deserialize Binary Tree
- linux中的NFS服务配置
- Swift(六、控制流)
- 直接插入排序
- 经典排序算法 - 归并排序Merge sort
- 容斥基础
- 理解:虚拟内存,虚拟内存地址,物理内存,物理内存地址
- wamp修改mysql默认空密码2
- linux下安装jdk的几种方式
- HDU 4101 Ali and Baba
- 【JDK源码】从JDK/ArrayList源码学习高质量代码
- spring boot实战(第十一篇)初识RabbitMQ
- spring 注解方式配置Bean
- 如何修改WAMP中mysql默认空密码&重新登录phpmyadmin
- MYSQL的文件排序(filesort)和索引排序
- 【C#】winform子窗体与父窗体传值,子窗体与子窗体传值
- 【Unity3D游戏开发学习笔记】(六)上帝之手—GameObject的操作