题意:有价值为1-6的六种玻璃球,现在告诉你各种玻璃球的个数,问能否将这些玻璃球分成两份,使得两份的总价值相等

既然要等分,那么总价值必定是偶数,所以价值和为奇数是无法等分。
但价值和为偶数时,我们可以看做背包问题,背包的体积大小为sum/2,如果能够等分,则恰好可以将这个背包填满,即有dp[sum/2]=sum/2.
每种玻璃球的数量1和无穷,所以这是一个多重背包,这道题得用到二进制优化(别问我怎么知道的,TLE警告).二进制优化就是把多重背包转化为01背包,任意数都可以用多个二制数的和表示,所以将其拆分为若干个体积和价值为原来的2n的新物品,在进行01背包,复杂度为nvlg(num).

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>#define inf 0x3f3f3f3fusing namespace std;const int N = 2e5+50;int dp[N], arr[10];int sum;vector<int> vec;int input() {sum = 0;vec.clear();for (int i = 1; i <= 6; i++) {scanf("%d", &arr[i]);sum += arr[i] * i;for (int k = 1; k <= arr[i]; k<<=1) {arr[i] -= k;vec.push_back(k * i);}if (arr[i] > 0) {vec.push_back(arr[i] * i);}}return sum;
}int main() {int Case = 0;while (input()!=0) {printf("Collection #%d:\n", ++Case);if (sum & 1) {printf("Can't be divided.\n\n");continue;}else {memset(dp, 0, sizeof(dp));vector<int>::iterator iter = vec.begin();for (; iter != vec.end(); iter++) {for (int v = sum / 2; v >= *iter; v--) {dp[v] = max(dp[v], dp[v - *iter] + *iter);}}if (dp[sum / 2] == sum / 2) {printf("Can be divided.\n\n");}else {printf("Can't be divided.\n\n");}}}
}

Dividing(多重背包二进制优化)相关推荐

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

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

  2. POJ 1014 Dividing【多重背包+二进制优化】

    大意: 价值1, 2, 3, --, 6的物品分别a1, a2, --, a5, a6件 问能否把这些物品分成两份,使其具有相同的价值(所有物品必须全部用上) 分析: 给个物品有多件,即多重背包 只要 ...

  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. 同步SQL Server 2000 数据库
  2. yocto中文环境搭建
  3. 【渝粤教育】国家开放大学2019年春季 289法理学 参考试题
  4. 埋点 神策小程序_第9讲. 神策数据获3000万美元 C+ 轮融资,A、B、C 轮资方全部跟投!...
  5. 竞价这种方式适合不适合GPU云服务器,怎么买更划算??
  6. MySql查询某列是否包含汉字
  7. Mac 重装 Apache 后中文目录乱码
  8. RazorSQL for Mac:查看和编辑二进制数据和图像
  9. OCR识别身份证及营业执照图片(Java版)
  10. 边缘检测之非极大值抑制原理
  11. 八大数据分析模型之——用户模型(一)
  12. Word文件忘记保存,恢复文件信息的方法
  13. 如何利用腾讯云服务器搭建个人网站
  14. 使用随机文件流类RandomAccessFile将一个文本文件倒置读出
  15. java运算符优先级
  16. PowerPivot——DAX(函数)
  17. 唐骏:我的成功可以复制
  18. 源代码加密软件选型分析
  19. 如何免费使用cdn资源[棋牌游戏服务器配置]
  20. java饭堂管理代码论文_[计算机设计精品] 基于java的餐饮管理系统(毕业论文).doc...

热门文章

  1. 【movsb cmpsb cld std】
  2. Automatic Optic Disc Detection in OCT Slices via Low-Rank Reconstruction
  3. 业绩不佳员工怨声载道 传微软CEO鲍尔默将离职
  4. 记录android 添加系统证书
  5. 7.物体的几何表示——细分曲面
  6. IOS证书配置-Flutter学习
  7. 新书上市 |《谁在掷骰子?》在“不确定性时代”中确定前行
  8. android开源新闻小程序、3D翻转公告效果、小说检索、Kotlin开发TODO清单等源码...
  9. uniapp省市区街道四级级联动选择器
  10. 32岁京东毕业程序员,走投无路当了外企外包,闲得心里发慌,到点下班浑身不自在!