Codeforces 106C Buns - 多重背包 - 二进制拆分
多重背包可以拆分为01背包来做,最暴力的想法是把每类物品拆成一个个的,然后拆分后的物品各自为一类,做01背包。然而这样太慢了,我们可以用二进制(倍增)来优化拆分。
比如说我们有
1
10
100
1000
10000
这些二进制数,他们代表1, 2, 4, 8, 16
那么这些数可以组合出1~31之间所有的数
所以把物品倍增拆分,一样可以得到正确的答案。
#include <algorithm>
#include <iostream>
#include <cstdio>
using namespace std;
const int MAXN = 1010;
struct Bread{int mx, v, w;//最大个数,价值,花费/重量
}bre[MAXN];
int n,m,c0,d0,ans,sum;
int f[MAXN];
int main() {cin >> n >> m >> c0 >> d0;bre[0].mx = n/c0,bre[0].v = d0,bre[0].w = c0;for(int i=1; i<=m; i++) {int a,b,c,d;cin >> a >> b >> c >> d;bre[i].mx = a/b;bre[i].v = d;bre[i].w = c; }for(int i=0; i<=m; i++) {int a[22], t = 0, sum = 0;//循环到20 开到22for(int k=0; k<=20; k++) {sum += 1<<k;if(sum > bre[i].mx) {sum -= 1<<k;break;}a[++t] = (1<<k);}a[++t] = bre[i].mx - sum; //二进制划分后剩下的部分for(int k=1; k<=t; k++) {int vk = bre[i].v*a[k];int wk = bre[i].w*a[k];for(int j=n; j>=wk; j--) {f[j] = max(f[j],f[j-wk]+vk);}}}cout << f[n];return 0;
}
Codeforces 106C Buns - 多重背包 - 二进制拆分相关推荐
- 多重背包---二进制拆分---java小知识
- [多重背包+二进制优化]HDU1059 Dividing
题目链接 题目大意: 两个人要把一堆宝珠,在不能切割的情况下按照价值平分,他们把宝珠分成6种价值,每种价值的宝珠n个. n<=200000 思考: 首先如果加和下来的价值是一个偶数 那么还分毛啊 ...
- HDU 5445 Food Problem 多重背包+二进制优化
据说也可以用单调队列优化多重背包,但是我不会,所以还是选择了二进制优化... 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5445 题意:先给n,m, ...
- Dividing(多重背包二进制优化)
题意:有价值为1-6的六种玻璃球,现在告诉你各种玻璃球的个数,问能否将这些玻璃球分成两份,使得两份的总价值相等 既然要等分,那么总价值必定是偶数,所以价值和为奇数是无法等分. 但价值和为偶数时,我们可 ...
- jzoj100044-abcd【多重背包,二进制压缩,dp】
正题 题目大意 给出长度为nnn的序列a,b,c,da,b,c,da,b,c,d 求一个序列eee满足 (∑i=1nei∗ci)=0(e∈[ai..bi])(\sum _{i=1}^ne_i*c_i) ...
- hdu2844 Coins(普通的多重背包 + 二进制优化)
看完背包九讲的多重背包之后,这题目应该可以轻松做出来了 模型: 有N种物品和一个容量为V的背包.第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i].求解将哪些物品装入背包可使这些物品的 ...
- POJ 1014 Dividing【多重背包+二进制优化】
大意: 价值1, 2, 3, --, 6的物品分别a1, a2, --, a5, a6件 问能否把这些物品分成两份,使其具有相同的价值(所有物品必须全部用上) 分析: 给个物品有多件,即多重背包 只要 ...
- zcmu-1919: kirito(多重背包——二进制优化)
Description 主角kirito是使用世界首款完全潜行游戏"刀剑神域(Sword Art Online)"的玩家.曾经很幸运的参与过封闭测试,并买下正式版的kirito,正 ...
- 12.14补卡,多重背包二进制优化
题目链接:22背包专题 [Cloned] - Virtual Judge (vjudge.net) 思路:多重背包的主要思路就是把每一个物品分开放,从而达到每个物品拿与不拿全部遍历到.但是当物品数量过 ...
- ZCMU-1919 kirito's 星爆气流斩(多重背包+二进制优化)
Problem C: kirito's 星爆气流斩 Time Limit: 2 Sec Memory Limit: 128 MB Submit: 148 Solved: 37 [Submit][S ...
最新文章
- jenssen不等式的证明
- obj c和java_PKCS1-padding / RSA加密ios objc和java之间的区别
- ASP.NET MVC
- LCD1602,4位数据总线液晶屏时钟,STC12C5A60S2的10位ADC功能程序
- 国际旅游管理专业跨专业考计算机,旅游管理考研我想跨专业考旅游管理专业的研究 – 手机爱问...
- 无需另配定时器在STM32 HAL下实现微秒级延时(兼容FreeRTOS)
- linux apache tomcat ajp,Linux下apache tomcat ajp session複製
- JSON中的多行字符串
- javascript学习之数组的使用三 slice方法 splice方法
- 蓝桥杯每日真题之砝码称重(01背包)
- 类和对象之Scala程序
- 高速电路设计与仿真之PCB篇(一)
- 桌面美化 Python tkinter倒计时工具
- Flutter发送表情接收表情库
- WPF学习系列 游戏-选张图片做成9宫格拼图
- 写给喜欢数学和不喜欢数学的朋友们
- 常见的配置中心:Apollo(二)-接入Apollo
- 蓝牙设备名字和地址ID如何设置
- C语言自学保姆教程——第一节--编译准备与第一个C程序
- 查询oracle授权信息,oracle授权查询
热门文章
- rust-crate
- UE官网ARPG游戏学习笔记1
- matlab normx-x0_【 MATLAB 】norm ( Vector and matrix norms )(向量范数以及矩阵范数)
- 一周内,在闲鱼上被疯狂转了2万次的Redis资料!!!
- 润肤悦颜各种偏方秘方
- Eslint+Prettier 实现代码 git 提交时自动格式化及修复
- OA新增百亿市场,蓝凌、钉钉靠“智能OA”占稳C位
- c语言程序设计题目湖南大学,湖南大学C语言期末考试样卷
- DAOS整体设计分析 (一)
- ECS云服务器新手上路