博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu1059Dividing
阅读量:6311 次
发布时间:2019-06-22

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

题意:有6种石头,价值分别是1,2,3,4,5,6   每种有若干,作为输入数据。问能否把这些石头按照价值均分?

分析:多重背包问题。

代码:

View Code
1 #include 
2 #include
3 #include
4 using namespace std; 5 const int MAXN = 60000 + 5; 6 int dp[MAXN], n[6]; 7 int main(){ 8 int i, j, k; 9 int cas = 0;10 while(scanf("%d%d%d%d%d%d",&n[1],&n[2],&n[3],&n[4],&n[5],&n[6])!=EOF){11 int sum=n[1]+n[2]*2+n[3]*3+n[4]*4+n[5]*5+n[6]*6;12 if(!sum) break;13 printf("Collection #%d:\n", ++cas);14 if(sum%2) {15 printf("Can't be divided.\n\n");16 continue;17 }18 for(i=0; i
>1;20 for(i=1; i<=6; i++){21 for(k=1; n[i]; k<<=1){22 if(n[i]
=k*i; j--)24 if(dp[j]

发现如果用max()函数会比较慢,改用if判断来更新dp值的时候会快0.6秒左右~

不过如果输入数据a[i]mod30后会0ms就ac 我表示很不解:

View Code
1 #include 
2 #include
3 #include
4 using namespace std; 5 const int MAXN = 60000 + 5; 6 int dp[MAXN], n[6]; 7 int main(){ 8 int i, j, k; 9 int cas = 0;10 while(true){11 int sum = 0;12 for(i=1; i<=6; i++){13 scanf("%d", &n[i]);14 n[i]%=30;15 sum+=n[i]*i;16 }17 if(!sum) break;18 printf("Collection #%d:\n", ++cas);19 if(sum%2) {20 printf("Can't be divided.\n\n");21 continue;22 }23 for(i=0; i
>1;25 for(i=1; i<=6; i++){26 for(k=1; n[i]; k<<=1){27 if(n[i]
=k*i; j--)29 if(dp[j]

至于剪枝我还没有去想过,这里的代码可以参考下

转载地址:http://vjxxa.baihongyu.com/

你可能感兴趣的文章
英特尔将业务重点转移到物联网
查看>>
高通/华为/中兴 5G时代市场格局再预测
查看>>
iOS从0到1搭建高可用App框架
查看>>
科大讯飞智慧医疗事业部空降领头人,深度解析讯飞“AI+医疗”战略
查看>>
StackOverflow转向默认使用HTTPS
查看>>
英特尔稳扎稳打!以色列厂明年初或将导入10纳米
查看>>
Gartner:2020年,云计算安全服务市场将达到近90亿美元
查看>>
国网河南电力探索建设能源大数据中心
查看>>
《React Native移动开发实战》一一第1章 为什么要学习React Native
查看>>
如何用深度学习推荐电影?教你做自己的推荐系统!
查看>>
《系统分析与设计方法及实践》一2.3 结对编程方法
查看>>
英特尔澄清:第一款10nm产品2017年定发布
查看>>
云服务器 ECS 数据恢复:使用快照策略和镜像备份数据
查看>>
混合云、区块链、认知技术,还有哪一样前沿技术是IBM没提到的吗?
查看>>
前端在人工智能时代能做些什么?
查看>>
中国校园安防产品应用特点分析
查看>>
2016华为在泰国举办全球电力峰会
查看>>
Win 10在2018年达10亿安装量?微软说要再想想
查看>>
WhatsApp全面实施端对端加密 警方无法获取用户信息
查看>>
你还敢开车吗?黑客三分钟攻破你的私家车
查看>>