大意:

价值1, 2, 3, ……, 6的物品分别a1, a2, ……, a5, a6件

问能否把这些物品分成两份,使其具有相同的价值(所有物品必须全部用上)

分析:

给个物品有多件,即多重背包

只要看能不能将这些物品拼成   总价值 的 一半就可以了

转化为01背包是用二进制优化,否则会超时

代码:

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 using namespace std;
 5
 6 const int maxn = 20005 * 6;
 7
 8 int n, all;
 9 int vo[maxn];
10 int dp[maxn];
11 bool solve() {
12     if(all % 2 == 1) return false;
13     all /= 2;
14     memset(dp, 0, sizeof(dp));
15     for(int i = 1; i <= n; i++) {
16         if(vo[i] > all) return false;
17         for(int j = all; j >= vo[i]; j--) {
18             dp[j] = max(dp[j], dp[j - vo[i]] + vo[i]);
19         }
20     }
21     if(dp[all] != all) return false;
22     return true;
23 }
24
25 int main() {
26     int a[10];
27     int kase = 1;
28     while(scanf("%d %d %d %d %d %d",&a[1], &a[2], &a[3], &a[4], &a[5], &a[6]) ) {
29         all = 0;
30         for(int i = 1; i <= 6; i++) {
31             all += a[i] * i;
32         }
33         if(all == 0) break;
34         n = 1;
35         for(int i = 1; i <= 6; i++) {
36             for(int k = 1; k <= a[i]; k *= 2) {
37                 vo[n++] = k * i;
38                 a[i] -= k;
39             }
40             if(a[i]) vo[n++] = a[i] * i;
41         }
42         n--;
43         printf("Collection #%d:\n", kase++);
44         puts(solve() ? "Can be divided." : "Can't be divided.");
45         puts("");
46     }
47     return 0;
48 }

View Code

转载于:https://www.cnblogs.com/zhanzhao/p/3942748.html

POJ 1014 Dividing【多重背包+二进制优化】相关推荐

  1. [多重背包+二进制优化]HDU1059 Dividing

    题目链接 题目大意: 两个人要把一堆宝珠,在不能切割的情况下按照价值平分,他们把宝珠分成6种价值,每种价值的宝珠n个. n<=200000 思考: 首先如果加和下来的价值是一个偶数 那么还分毛啊 ...

  2. Dividing(多重背包二进制优化)

    题意:有价值为1-6的六种玻璃球,现在告诉你各种玻璃球的个数,问能否将这些玻璃球分成两份,使得两份的总价值相等 既然要等分,那么总价值必定是偶数,所以价值和为奇数是无法等分. 但价值和为偶数时,我们可 ...

  3. zcmu-1919: kirito(多重背包——二进制优化)

    Description 主角kirito是使用世界首款完全潜行游戏"刀剑神域(Sword Art Online)"的玩家.曾经很幸运的参与过封闭测试,并买下正式版的kirito,正 ...

  4. HDU 5445 Food Problem 多重背包+二进制优化

    据说也可以用单调队列优化多重背包,但是我不会,所以还是选择了二进制优化... 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5445 题意:先给n,m, ...

  5. 12.14补卡,多重背包二进制优化

    题目链接:22背包专题 [Cloned] - Virtual Judge (vjudge.net) 思路:多重背包的主要思路就是把每一个物品分开放,从而达到每个物品拿与不拿全部遍历到.但是当物品数量过 ...

  6. hdu2844 Coins(普通的多重背包 + 二进制优化)

    看完背包九讲的多重背包之后,这题目应该可以轻松做出来了 模型: 有N种物品和一个容量为V的背包.第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i].求解将哪些物品装入背包可使这些物品的 ...

  7. ZCMU-1919 kirito's 星爆气流斩(多重背包+二进制优化)

    Problem C: kirito's 星爆气流斩 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 148  Solved: 37 [Submit][S ...

  8. ZCMU 1919: kirito's 星爆气流斩(多重背包+二进制优化)

    1919: kirito's 星爆气流斩 Time Limit: 2 Sec  Memory Limit: 128 MB Description 主角kirito是使用世界首款完全潜行游戏" ...

  9. hdu 2191 (多重背包二进制优化)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=2191 实现代码: #include<bits/stdc++.h> using namespac ...

最新文章

  1. 互联网笔试各种主流语言在OJ上的的标准输入输出
  2. 开源游戏机java模拟器_最棒的 7 款开源终端模拟器
  3. “AI开发者大会”早鸟票抢购倒计时开始~
  4. RabbitMQ 消息确认机制confirm代码编写
  5. GDCM:gdcm::Image的测试程序
  6. Qt界面美化 QSS
  7. libsvm3.22——使用指南
  8. 教育计算机缩写,{教育管理}计算机缩写术语完全介绍宝典.docx
  9. django mysql port,Django使用MySql数据库
  10. 计算机上找不到运行程序怎么办,电脑联网时显示找不到应用程序怎么办
  11. 【转】PLC编程软件: KW multiprog 和 codesys
  12. 蓝桥杯练习1:等差素数列
  13. wordpress相册_如何在WordPress中使用相册创建相册
  14. Linux系统中dmesg命令使用详解
  15. 还记得最初的九九乘法表吗?
  16. 企业邮箱邮件的服务器地址是什么?企业邮箱服务器出错怎么办?
  17. 教你怎么解决Linux依赖包第一篇:pkgs.org资源网下载
  18. matlab 拟合光滑曲线图,Matlab光滑曲线多项式拟合与样条曲线拟合的两个案例
  19. 从普通回溯到三色标记法法
  20. [Shiro教程] Shiro 教程基于SSM(SpringMVC + Spring + Mybatis)EHCache版本

热门文章

  1. 申通快递机器人上岗_【峰暴】618, 数万台机器人上岗为您服务!
  2. hadoop2.9.2安装hadoop_pid_dir_Hadoop3.2 +Spark3.0全分布式安装
  3. python库怎么绘画_python中的turtle库(图形绘画库)
  4. android内存溢出错误,Android Studio 生成 JavaDoc 空指针异常|文档编码出错|内存溢出...
  5. qprocess start怎么判断是否结束_致恋爱中的我们,怎么样来判断一个女人是否在骗你?...
  6. 运算符重载 返回类型说明符后加_Python3基础:从独特的角度看运算符重载
  7. 时分多路复用(Time Division Multiplexing,TDM)
  8. 原生html如何发送网络请求,原生JS向服务器发送GET请求
  9. java 选择排序入门
  10. 全文搜索引擎 Elasticsearch 入门概念