练习三 1021
2016-05-22 10:54
411 查看
概述:有六种物品,每种物品对应的价值为1~6,给定每种物品的个数,切不可分割,问能否把这堆物品分为等价值的两份。
思路:多重背包,计算过程比较复杂,所以要优化一下,先把总价值为奇数的组排除掉(因为奇数不可能分为等价值的两份),然后再套模板计算即可。
感想:无。
思路:多重背包,计算过程比较复杂,所以要优化一下,先把总价值为奇数的组排除掉(因为奇数不可能分为等价值的两份),然后再套模板计算即可。
感想:无。
#include <iostream> #include <cstring> using namespace std; int map[7]; int dp[100000]; int main() { int flag=1; while(1) { int sum=0,v,cnt; for(int i=1;i<=6;++i) { cin>>map[i]; sum+=i*map[i]; } if(sum==0) break; cout<<"Collection #"<<flag++<<":\n"; if(sum%2) { cout<<"Can't be divided.\n\n"; continue; } v=sum/2; memset(dp,0,sizeof(dp)); dp[0]=1; for(int i=1;i<=6;++i) { if(!map[i]) continue; for(int j = 1;j<=map[i];j*=2) { cnt = j*i; for(int k = v;k>=cnt;k--) { if(dp[k-cnt]) dp[k] = 1; } map[i]-=j; } cnt = map[i]*i; if(cnt) { for(int k = v;k>=cnt;k--) { if(dp[k-cnt]) dp[k] = 1; } } } if(dp[v]) cout<<"Can be divided.\n\n"; else cout<<"Can't be divided.\n\n"; } return 0; }
相关文章推荐
- MySQL 优化
- 书评:《算法之美( Algorithms to Live By )》
- Google排名优化的几个影响因素
- 动易2006序列号破解算法公布
- DB2优化(简易版)
- Mysql limit 优化,百万至千万级快速分页 复合索引的引用并应用于轻量级框架
- C#中尾递归的使用、优化及编译器优化
- 对优化Ruby on Rails性能的一些办法的探究
- 优化Ruby脚本效率实例分享
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- Asp编码优化技巧
- 如何监测和优化OLAP数据库
- mysql -参数thread_cache_size优化方法 小结
- 深入学习SQL Server聚合函数算法优化技巧
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题