博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
uva 12325 宝箱
阅读量:5905 次
发布时间:2019-06-19

本文共 1381 字,大约阅读时间需要 4 分钟。

题目链接:

一开始是完全背包,那个容量是一个32位数字,存不下。

然后暴力枚举,当n很大,s1,s2很小的时候,是不行的。

然后一个一个枚举,竟然还是超时。

 

其实,当一个一个枚举的时候,可以这样想,当我的某一种比较小的时候就可以枚举他。

但是要是s1,s2都很小的时候,枚举哪个都是超时的。

这个时候,可以这样考虑,假设两中体积相等(1宝贝s2个,2宝贝s1个),但是他有一个性价比,价值分别是s2*v1 和 s1*v2;

那么如果1宝贝价值大一点,那么2宝贝肯定个数小于s1个,枚举这s1个就OK了

1 /* 2 #include 
3 #include
4 #include
5 #include
6 7 using namespace std; 8 9 int d[10000000];10 int s1,v1,s2,v2;11 12 int dp(int s) {13 int& ans = d[s];14 if(ans>=0) return ans;15 ans = 0;16 if(s-s1>=0)ans = max(ans,dp(s-s1)+v1);17 if(s-s2>=0)ans = max(ans,dp(s-s2)+v2);18 return ans;19 }20 21 22 int main()23 {24 int t;25 cin>>t;26 int kase = 1;27 while(t--) {28 memset(d,-1,sizeof(d));29 int s;30 cin>>s;31 cin>>s1>>v1>>s2>>v2;32 int ans = dp(s);33 printf("Case #%d: %d\n",kase++,ans);34 }35 return 0;36 }37 */38 39 40 #include
41 #include
42 #include
43 #include
44 45 using namespace std;46 47 #define INF 500048 49 int main()50 {51 52 int t;53 cin>>t;54 long long s,s1,v1,s2,v2;55 int kase= 1;56 while(t--)57 {58 long long ans = 0;59 cin>>s>>s1>>v1>>s2>>v2;60 61 if(s/s1
sum2) { //1 de xing jia bi gao79 for(long long i=0;i
View Code

 

转载于:https://www.cnblogs.com/TreeDream/p/6495636.html

你可能感兴趣的文章
管理故事:学会放弃
查看>>
【精品推荐】web开发人员应该知道的31个jQuery模态对话框
查看>>
D3DXColor的操作
查看>>
Winform中DataGridView的DataGridViewCheckBoxColumn使用方法(选中与选不中)
查看>>
SSI
查看>>
Extjs4中tabPanel
查看>>
实用编程技术之多个头文件中变量的重复定义
查看>>
SxsTrace工具使用方法(转)
查看>>
【BZOJ】3223: Tyvj 1729 文艺平衡树(splay)
查看>>
从0到1,教你实现基于Ruby的watir-webdriver自动化测试
查看>>
Muduo 多线程模型对比
查看>>
【leetcode】Same Tree(easy)
查看>>
Araxis Merge Professional v2014.4565 特别版 | 文件比较合并
查看>>
可变速率的语音变调效果
查看>>
测试Flask应用_学习笔记
查看>>
11G新特性 -- 块介质恢复性能增强(block media recovery)
查看>>
九宫格抽奖HTML+JS版
查看>>
如何根据市场特征判断绝佳买入点
查看>>
MSSQL发现第五到数据的第十
查看>>
百度地图 鼠标绘制,获取矩形,多边形的顶点经纬度
查看>>