POJ1014 & HDU1059 Dividing
来源:互联网 发布:金山数据恢复 账号 编辑:程序博客网 时间:2024/05/16 00:25
PS:背包类问题。
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <vector>using namespace std;const int maxn = 120000+10;int sum = 0;int a[8];int f[maxn];//Accepted624K16MSC++1457B2014-04-13 15:14:22void all_bag(int c, int w) { for(int i = c; i <= sum; i++) { f[i] = max(f[i], f[i-c]+w); }}void ZeroOneBag(int c, int w) { for(int i = sum; i >= c; i--) { f[i] = max(f[i], f[i-c]+w); }}void mult_bag(int c, int w, int n) { if(n*c >= sum) { all_bag(c, w); return; } int k = 1; while(k < n) { ZeroOneBag(k*c, k*w); n -= k; k *= 2; } ZeroOneBag(n*c, n*w);}int main(){ int k = 1; while(scanf("%d%d%d%d%d%d", &a[1], &a[2], &a[3], &a[4], &a[5], &a[6])==6) { sum = 0; for(int i = 1; i <= 6; i++) sum += a[i]; if(!sum) break; sum = 0; for(int i = 1; i <= 6; i++) { sum += i*a[i]; } if(sum&1) { printf("Collection #%d:\nCan't be divided.\n\n",k++); continue; } sum /= 2; memset(f, 0, sizeof(f)); // init; for(int i = 1; i <= 6; i++) { if(a[i]) { mult_bag(i, i, a[i]); } } if(f[sum]==sum) printf("Collection #%d:\nCan be divided.\n\n",k++); else printf("Collection #%d:\nCan't be divided.\n\n",k++); } return 0;}
0 0
- poj1014 hdu1059 Dividing
- POJ1014 & HDU1059 Dividing
- HDU1059&&POJ1014-Dividing
- HDU1059 && POJ1014 :Dividing(多重背包)
- hdu1059 &poj1014 Dividing (多重背包)
- poj1014 hdu1059 Dividing 多重背包
- HDU1059 && POJ1014 :Dividing(多重背包)
- ZOJ1149 POJ1014 HDU1059 Dividing,多重背包问题
- poj1014+hdu1059--A - Dividing(多重背包,二进制优化)
- HDU1059 && POJ1014
- hdu1059 Dividing
- hdu1059---Dividing
- hdu1059 Dividing
- hdu1059 Dividing
- poj1014 - Dividing
- poj1014:Dividing
- POJ1014 Dividing
- poj1014 Dividing
- 使用R完成均值检验
- C++ 二叉堆头文件
- sql数据库连接:用户‘sa’登录失败问题破解(百度加个人总结)
- 杭电acm 2000
- 栈与队列
- POJ1014 & HDU1059 Dividing
- 克隆空间也是一种爱好
- 选择排序
- 黑马程序员—Java语言基础(程序流程控制-if、switch、for、while、do while、break、continue)
- [2010山东省第一届ACM大学生程序设计竞赛]——Hello World!
- webView中支持input的file的选择和alert弹出
- 一切以用户为中心,其它的纷至而来
- 随笔
- C的链表的概念应用