HDOJ1059
来源:互联网 发布:智能制造仿真软件 编辑:程序博客网 时间:2024/06/06 01:06
多重背包
#include <stdio.h>#include <string.h>#define mymax(a, b) (a>b) ? a:bint c[7];int dp[60000];void ZeroOnePack(int c, int v) { int i; for (i=v; i>=c; --i) dp[i] = mymax(dp[i], dp[i-c]);}void CompletePack(int c, int v) { int i; for (i=c; i<=v; ++i) dp[i] = mymax(dp[i], dp[i-c]);}void MultiPack(int c, int n, int v) { int k = 1; if (c*n >= v) { CompletePack(c, v); return ; } while (k < n) { ZeroOnePack(k*c, v); n -= k; k *= 2; } ZeroOnePack(n*c, v);}int main() { int t = 0, total; int i; while ( 1 ) { total = 0; for (i=1; i<=6; ++i) { scanf("%d", &c[i]); total += c[i]*i; } if (total == 0) break; printf("Collection #%d:\n", ++t); if (total & 1) { printf("Can't be divided.\n\n"); continue; } total >>= 1; memset(dp, 0, sizeof(dp)); dp[0] = 1; for (i=1; i<=6; ++i) { MultiPack(i, c[i], total); if (dp[total]) break; } if (dp[total]) printf("Can be divided.\n\n"); else printf("Can't be divided.\n\n"); } return 0;}
0 0
- hdoj1059
- hdoj1059
- {....................}hdoj1059
- HDOJ1059
- HDOJ1059 Dividing
- HDOJ1059-Dividing(DP)
- hdoj1059 Dividing 多重背包
- hdoj1059 Dividing (水题)
- hdoj1059 Dividing(多重背包+二进制化简)
- 南阳理工OJ547---------------HDOJ1059---------多重背包~~~~有模板!!
- Linux下安装gcc和samba详解
- VC++实现SYN扫描
- css3 transition
- HDU1325 Is It A Tree? 并查集
- C语言内存相关
- HDOJ1059
- Mysql SQL Mode与可移植性
- 解决LR-Controller场景下1个用户运行出错
- VC++多线程tcp connect扫描
- 向大家推荐一下我的网站后台(ssh+mysql)
- C和C++中动态分配内存,区别
- VC++远程插入dll代码
- Tk Tutorial - 13. Text
- 对云计算中几种基础设施(Dynamo,Bigtable,Map/Reduce等)的朴素看法