HDU 1059 Dividing(多重背包)
2014-08-27 20:26
405 查看
题目地址:HDU 1059
这题在看多重背包以前碰到过。。现在觉得好水。。。本来觉得不用写在博客里的。。但是发现今天还一篇也没写。。。还是写一篇吧。。。
这题在看多重背包以前碰到过。。现在觉得好水。。。本来觉得不用写在博客里的。。但是发现今天还一篇也没写。。。还是写一篇吧。。。
#include <iostream> #include <cstdio> #include <string> #include <cstring> #include <stdlib.h> #include <math.h> #include <ctype.h> #include <queue> #include <map> #include <set> #include <algorithm> using namespace std; int b[100000], dp[100000]; int main() { int a[10], i, sum, j, k, num=0, cnt, x, y; while(scanf("%d%d%d%d%d%d",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5])!=EOF&&(a[0]+a[1]+a[2]+a[3]+a[4]+a[5])) { num++; cnt=0; sum=0; for(i=0; i<6; i++) sum+=a[i]*(i+1); printf("Collection #%d:\n",num); if(sum%2) { printf("Can't be divided.\n\n"); continue ; } sum/=2; for(i=0;i<6;i++) { x=a[i]; y=1; while(x) { if(x<=y) { b[cnt++]=(i+1)*x; break; } b[cnt++]=(i+1)*y; x-=y; y*=2; } } memset(dp,0,sizeof(dp)); dp[0]=1; for(i=0;i<cnt;i++) { for(j=sum;j>=b[i];j--) { if(dp[j-b[i]]) { dp[j]=1; } } } if(dp[sum]) printf("Can be divided.\n"); else printf("Can't be divided.\n"); printf("\n"); } return 0; }
相关文章推荐
- hdu1059 Dividing (多重背包) 经典
- HDU 1059 POJ 1014 Dividing (多重背包)
- HDOJ(HDU).1059 Dividing(DP 多重背包+二进制优化)
- poj1014 hdu1059 Dividing 多重背包
- hdu 1059 Dividing(完全背包)
- HDU 1059 Dividing 多重背包
- hdu 1059 Dividing(二进制转化优化) 分组背包
- (step3.3) hdu 1059(Dividing——多重背包)
- 【背包专题】G - Dividing hdu 1059【多重背包】
- hdu1059 Dividing(完全背包)
- hdu 1059 Dividing 多重背包
- HDU 1059 Dividing(多重背包)
- Hdu 1059 Dividing -- 多重背包
- HDU-1059-Dividing-wust9(背包)
- HDU 1059 Dividing(多重背包)
- hdu 1059 Dividing(多重背包)
- hdu1059 Dividing 我的ACM我的梦,回顾篇 完全背包
- Dividing (hdu 1059 多重背包)
- HDU 1059 Dividing(多重背包二进制优化)
- hdu 1059 Dividing 多重背包