hdu 1059 (多重背包) Dividing
这里;http://acm.hdu.edu.cn/showproblem.php?pid=1059
题意是有价值分别为1,2,3,4,5,6的商品各若干个,给出每种商品的数量,问是否能够分成价值相等的两份.
联想到多重背包,稍微用二进制优化一下。(最近身体不适,压力山大啊)
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #define inf 70000 5 using namespace std; 6 int dp[inf]; 7 int sum; 8 void pack(int price) 9 { 10 for(int i = sum; i >= price; i--) dp[i] = max(dp[i], dp[i - price] + price); 11 } 12 int main() 13 { 14 int a[8],i,q=1,j; 15 while (~scanf("%d %d %d %d %d %d",&a[1],&a[2],&a[3],&a[4],&a[5],&a[6])) 16 { 17 if (a[1]==0&&a[2]==0&&a[3]==0&&a[4]==0&&a[5]==0&&a[6]==0) 18 break; 19 memset(dp,-inf,sizeof(dp)); 20 dp[0]=0; 21 printf("Collection #%d:\n",q++); 22 sum=0; 23 for (i=1;i<=6;i++) 24 sum+=a[i]*i; 25 if (sum%2!=0) 26 { 27 printf("Can't be divided.\n\n"); 28 continue; 29 } 30 sum/=2; 31 for (i=1;i<=6;i++) 32 { 33 if (i*a[i]>=sum) 34 { 35 for (j=i;j<=sum;j++) 36 dp[j]=max(dp[j],dp[j-i]+i); 37 } 38 else 39 { 40 int k = 1; 41 while(k < a[i]) 42 { 43 pack(k * i); 44 a[i] -= k; 45 k += k; 46 } 47 pack(a[i] * i); 48 } 49 } 50 if (dp[sum]==sum) 51 printf("Can be divided.\n\n"); 52 else 53 printf("Can't be divided.\n\n"); 54 } 55 return 0; 56 }
转载于:https://www.cnblogs.com/JJCHEHEDA/p/4893049.html
hdu 1059 (多重背包) Dividing相关推荐
- hdu 3591 多重背包+完全背包练习题
1 题目 http://acm.hdu.edu.cn/showproblem.php?pid=3591 题意:货币系统有 N 种不同面值的钱,每种钱的价值分别为 V1,V2,...,VN 一个人要买价 ...
- HDU 5445 (多重背包)
题目链接:点击这里 题意: 有n个物品, m个卡车. 已知每种物品的能量, 体积和数量还有每种卡车的体积, 花费和数量, 求至少得到p能量的最少的卡车花费. 物品装卡车的时候能够切开装. 两次多重背包 ...
- HDU 2844 (多重背包)
多重背包(二进制优化)模板 题意: 有n个硬币,每一个硬币有自己的数值Vi,其个数为Ci.不同硬币的不同组合能买到不同物品,问在1~V的区间内最多能买到多少不同种类的物品. 思路: 其实题意也就是求硬 ...
- hdu 2191 多重背包
悼念512汶川大地震遇难同胞--珍惜现在,感恩生活 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & ...
- hdu 2191 (多重背包二进制优化)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=2191 实现代码: #include<bits/stdc++.h> using namespac ...
- hdu 2191 多重背包入门
悼念512汶川大地震遇难同胞--珍惜现在,感恩生活 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
- 【HDU 1059】Dividing(多重背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1059 题意:有6种物品,价值分别是1,2,3,4,5,6,每种物品有n[ i ]个,,问是否能将其平分 ...
- (step3.3) hdu 1059(Dividing——多重背包)
题目大意:分别给出价值为1~6的石头的数量.问能否将这些石头等价值平分... 解题思路:多重背包 1)多重背包的典型描述是这样的:给出n种物品,背包的容量为V.每种物品的可用数量为num[i],所占体 ...
- Dividing(HDU 1059)(多重背包_二进制优化)
题目链接: 题意:有价值分别为1,2,3,4,5,6的marbles(大理石)若干,问是否能使这些marbles平分.[marbles总数不超过2e4(很明显这是一个大常数,所以用二进制优化来做)] ...
- hdu 1059 Dividing(多重DP)
点击打开链接 题目意思: 有各种物品,各自的价值为1,2,3,4,5,6: 给出各自的数目,判断能否将其平分. 使用母函数的话,果断超时. 所以才用多重背包,这里需要剪枝一下了. #include&q ...
最新文章
- unix实际用户ID和有效用户ID解析
- [置顶]IA32 architecture 学习笔记 (一)
- phpexcel设置AAA单元格,兼容大于702列数据
- 傅里叶变换(待总结)
- LeetCode题组:第7题-整数反转
- APK加壳【2】内存加载dex实现详解
- C++语言基础 —— STL —— 容器与迭代器 —— vector
- mulitp request
- 默认web地址_SpringMVC详解----Web层
- 【华为云技术分享】Batch Normalization (BN) 介绍
- mysql ip v4 v6_mysql IPv4 IPv6
- 多进程参数args元组方式与kwargs字典方式
- layui按条件隐藏表格列
- Unity 脚本的生命周期
- php之获取ip(网站地址)
- 二进制逆向工程师_逆向工程工具集
- pcs7服务器没有报警信息,PCS7服务器报警重启(工程师培训).pdf
- PYTHON-音视频合并方法
- Photoshop 使用技巧
- linux系统编译时make出错,centos 编译安装cmake和常见过程错误解决办法(linux系统均适用,以爬坑。。)...