HDU - 1059 Dividing(完全背包+多重背包)
来源:互联网 发布:万捷网络验证系统 编辑:程序博客网 时间:2024/06/08 13:36
题目大意:有6种硬币,价值分别是1,2,3,4,5,6。现在给出每种硬币的数量,问能否均分,使得两个人得到的价值一样
解题思路:如果能得到平均数,就表示能均分
考虑一下两种情况,如果价值*数量>=平均数/2,那就可以当成完全背包来考虑了
反之,就得当成多重背包考虑
#include <cstdio>#include <cstring>using namespace std;const int N = 60010;int num[6];int Sum;bool vis[N];void bag(int w, int n) { if (w * n >= Sum) { for (int i = w; i <= Sum; i++) if (vis[i - w]) vis[i] = true; } else { for (int i = 1; i <= n; n -= i, i *= 2) { for (int j = Sum; j >= i * w; j--) if (vis[j - i * w]) vis[j] = true; } }}int main() { int cas = 1; while (1) { Sum = 0; for (int i = 0; i < 6; i++) { scanf("%d", &num[i]); Sum += num[i] * (i + 1); } if (!Sum) break; printf("Collection #%d:\n", cas++); if (Sum % 2) printf("Can't be divided.\n\n"); else { Sum /= 2; memset(vis, 0, sizeof(vis)); vis[0] = true; for (int i = 0; i < 6; i++) if (num[i]) bag(i + 1, num[i]); if (vis[Sum]) 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
- poj 1466 Girls and Boys
- Vollery 框架之StringRequest二次封装
- pointer on C_1 基本概念
- spring的学习历程之利用MessageSource实现国际化占位符直接输出原因(一)
- 给定一个数组,返回最大子数组的累加和并且返回该子数组
- HDU - 1059 Dividing(完全背包+多重背包)
- C和指针(学习之旅)
- 蓝桥杯-Playfair密码
- C语言条件编译及编译预处理阶段
- the file opeartion in python(一)
- 究竟什么是中间件
- test
- hdoj4643GSM【计算几何+二分思想】
- 国内 程序员的十个等级 你属于哪个等级