HDU 1059 Dividing(多重背包)
来源:互联网 发布:python 定时执行函数 编辑:程序博客网 时间:2024/06/04 18:36
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1059
题意:
输入6个数字,表示重量分别为1 2 3 4 5 6的大理石的数量
问能不能将这些大理石均分,不能把大理石弄破了
能的话就输出 Can be divided.
不能就输出Can't be divided.
解题思路:
边输入边求和
如果和为0,就break
如果和为奇数,就输出Can't be divided.
和为偶数,多重背包判断
将每一块大理石的重量的值当作花费的值,套一下模板就可以了
如果对多重背包不是特别理解的,推荐看一下入门题http://http://blog.csdn.net/yhyyxt/article/details/46968541
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <string>using namespace std;int p[10],ans;int dp[120005];void CompletePack(int cost,int weight){for(int i=cost;i<=ans;i++){dp[i] = max(dp[i],dp[i-cost]+weight);}}void ZeroOnePack(int cost,int weight){for(int i=ans;i>=cost;i--){dp[i] = max(dp[i],dp[i-cost]+weight);}}void multiplePack(int cost,int weight,int number){if(cost*number>=ans){CompletePack(cost,weight);return;}int k=1;while(k<number){ZeroOnePack(k*cost,k*weight);number-=k;k*=2;}ZeroOnePack(number*cost,number*weight);}int main(){int cas=0;while(1){ans=0;memset(dp,0,sizeof(dp));for(int i=1;i<=6;i++){scanf("%d",&p[i]);ans+=p[i]*i;}if(ans==0) break;printf("Collection #%d:\n",++cas);if(ans%2==1){printf("Can't be divided.\n\n");continue;}ans/=2;for(int i=1;i<=6;i++){multiplePack(i,i,p[i]);} if(dp[ans]==ans) {printf("Can be divided.\n\n");}else{printf("Can't be divided.\n\n");}}return 0;}
0 0
- hdu 1059 Dividing (多重背包)
- hdu 1059 Dividing (多重背包 )
- HDU 1059 Dividing(多重背包)
- HDU 1059 Dividing (多重背包)
- HDU 1059 - Dividing(多重背包)
- hdu 1059 Dividing(多重背包)
- HDU 1059 Dividing(多重背包)
- HDU 1059 Dividing(多重背包)
- hdu 1059 Dividing(多重背包)
- HDU-1059 Dividing (多重背包)
- HDU-1059-Dividing(多重背包)
- hdu 1059 Dividing 多重背包
- hdu 1059 Dividing(多重背包)
- hdu 1059 Dividing(多重背包)
- HDU 1059 Dividing(多重背包)
- hdu 1059 Dividing 多重背包
- Hdu 1059 Dividing -- 多重背包
- hdu 1059 Dividing 多重背包
- iOS持续部署平台(一):SHENZHEN
- Swing之paint与paintComponent的区别
- [线段树] poj2823 Sliding Window
- 【转】[C#List的Sort()、Find()、FindAll()、Exist()的使用方法举例
- setNilValueForKey:could not set nil as the value for the key distance.解决方案
- HDU 1059 Dividing(多重背包)
- 解压tar.xz文件
- 函数
- hdoj-1197-Specialized Four-Digit Numbers
- 禁用掉横竖屏切换
- rabbitmq基本原理
- cf 558A Lala Land and Apple Trees
- 类 & 对象
- Junit4 框架学习