HDU 1059 Dividing (多重背包)
2014-04-08 18:10
393 查看
传送门:HDU 1059
#include <iostream> #include <cstdio> #include <cstring> using namespace std; int V,v; int data[7],dp[120001]; void bag01(int c,int w) { for(int j=V;j>=c;j--) dp[j]=max(dp[j],dp[j-c]+w); } void bagall(int c,int w) { for(int j=c;j<=V;j++) dp[j]=max(dp[j],dp[j-c]+w); } void dcbag(int c,int w,int n) { if(c*n>V) bagall(c,w); else { int num=1; while(num<n) { bag01(c*num,w*num); n-=num; num+=num; } bag01(c*n,w*n); } } int main() { int sum,t=1; while(~scanf("%d%d%d%d%d%d",&data[1],&data[2],&data[3],&data[4],&data[5],&data[6])) { if(data[1]==0&&data[2]==0&&data[3]==0&&data[4]==0&&data[5]==0&&data[6]==0) break; cout<<"Collection #"<<t<<":"<<endl; sum=data[1]+data[2]*2+data[3]*3+data[4]*4+data[5]*5+data[6]*6; if(sum%2!=0) cout<<"Can't be divided."<<endl<<endl; else { V=sum/2; memset(dp,0,sizeof(dp)); for(int i=1;i<=6;i++) dcbag(i,i,data[i]); if(dp[V]==V) cout<<"Can be divided."<<endl<<endl; else cout<<"Can't be divided."<<endl<<endl; } t++; } return 0; }
相关文章推荐
- hdu-1059-多重背包-Dividing
- poj 1014||hdu 1059 dividing(多重背包 二进制优化)
- hdu-1059-Dividing(多重背包+二进制优化)
- hdu 1059 Dividing (多重背包)
- 【动态规划】【多重背包】[HDU 1059]Dividing
- HDOJ(HDU).1059 Dividing(DP 多重背包+二进制优化)
- [hdu1059]Dividing 多重背包
- ZOJ1149 POJ1014 HDU1059 Dividing,多重背包问题
- HDU-1059-Dividing(多重背包)
- HDU 1059 Dividing(多重背包)
- hdu 1059 Dividing 多重背包
- hdu 1059 Dividing(多重背包)
- hdu 1059 Dividing--DP-多重背包问题
- HDU-1059 Dividing 多重背包
- HDU1059_Dividing【多重背包】【二进制】
- HDU 1059 Dividing 多重背包
- HDU 1059 Dividing (多重背包问题)
- HDU 1059 Dividing 【DP背包】
- hdu 1059 Dividing 多重背包
- hdu 1059 Dividing(优化的多重背包 可达可不达)