Dividing(多重背包二进制优化)
题意:有价值为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(多重背包二进制优化)相关推荐
- [多重背包+二进制优化]HDU1059 Dividing
题目链接 题目大意: 两个人要把一堆宝珠,在不能切割的情况下按照价值平分,他们把宝珠分成6种价值,每种价值的宝珠n个. n<=200000 思考: 首先如果加和下来的价值是一个偶数 那么还分毛啊 ...
- POJ 1014 Dividing【多重背包+二进制优化】
大意: 价值1, 2, 3, --, 6的物品分别a1, a2, --, a5, a6件 问能否把这些物品分成两份,使其具有相同的价值(所有物品必须全部用上) 分析: 给个物品有多件,即多重背包 只要 ...
- zcmu-1919: kirito(多重背包——二进制优化)
Description 主角kirito是使用世界首款完全潜行游戏"刀剑神域(Sword Art Online)"的玩家.曾经很幸运的参与过封闭测试,并买下正式版的kirito,正 ...
- HDU 5445 Food Problem 多重背包+二进制优化
据说也可以用单调队列优化多重背包,但是我不会,所以还是选择了二进制优化... 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5445 题意:先给n,m, ...
- 12.14补卡,多重背包二进制优化
题目链接:22背包专题 [Cloned] - Virtual Judge (vjudge.net) 思路:多重背包的主要思路就是把每一个物品分开放,从而达到每个物品拿与不拿全部遍历到.但是当物品数量过 ...
- hdu2844 Coins(普通的多重背包 + 二进制优化)
看完背包九讲的多重背包之后,这题目应该可以轻松做出来了 模型: 有N种物品和一个容量为V的背包.第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i].求解将哪些物品装入背包可使这些物品的 ...
- ZCMU-1919 kirito's 星爆气流斩(多重背包+二进制优化)
Problem C: kirito's 星爆气流斩 Time Limit: 2 Sec Memory Limit: 128 MB Submit: 148 Solved: 37 [Submit][S ...
- ZCMU 1919: kirito's 星爆气流斩(多重背包+二进制优化)
1919: kirito's 星爆气流斩 Time Limit: 2 Sec Memory Limit: 128 MB Description 主角kirito是使用世界首款完全潜行游戏" ...
- hdu 2191 (多重背包二进制优化)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=2191 实现代码: #include<bits/stdc++.h> using namespac ...
最新文章
- 同步SQL Server 2000 数据库
- yocto中文环境搭建
- 【渝粤教育】国家开放大学2019年春季 289法理学 参考试题
- 埋点 神策小程序_第9讲. 神策数据获3000万美元 C+ 轮融资,A、B、C 轮资方全部跟投!...
- 竞价这种方式适合不适合GPU云服务器,怎么买更划算??
- MySql查询某列是否包含汉字
- Mac 重装 Apache 后中文目录乱码
- RazorSQL for Mac:查看和编辑二进制数据和图像
- OCR识别身份证及营业执照图片(Java版)
- 边缘检测之非极大值抑制原理
- 八大数据分析模型之——用户模型(一)
- Word文件忘记保存,恢复文件信息的方法
- 如何利用腾讯云服务器搭建个人网站
- 使用随机文件流类RandomAccessFile将一个文本文件倒置读出
- java运算符优先级
- PowerPivot——DAX(函数)
- 唐骏:我的成功可以复制
- 源代码加密软件选型分析
- 如何免费使用cdn资源[棋牌游戏服务器配置]
- java饭堂管理代码论文_[计算机设计精品] 基于java的餐饮管理系统(毕业论文).doc...
热门文章
- 【movsb cmpsb cld std】
- Automatic Optic Disc Detection in OCT Slices via Low-Rank Reconstruction
- 业绩不佳员工怨声载道 传微软CEO鲍尔默将离职
- 记录android 添加系统证书
- 7.物体的几何表示——细分曲面
- IOS证书配置-Flutter学习
- 新书上市 |《谁在掷骰子?》在“不确定性时代”中确定前行
- android开源新闻小程序、3D翻转公告效果、小说检索、Kotlin开发TODO清单等源码...
- uniapp省市区街道四级级联动选择器
- 32岁京东毕业程序员,走投无路当了外企外包,闲得心里发慌,到点下班浑身不自在!