我在之前讲过0-1背包和完全背包,这里讲多重背包。不同于0-1背包和完全背包,多重背包中每个物品有个给定的数量。假定背包容量为m,有n个物品,每个物品的重量为weight[i], 价值为value[i], 数目为num[i]. 显然,多重背包可以转化为0-1背包问题:将num[i]个物品i看作是nu ...
分类:
其他好文 时间:
2019-03-05 09:43:24
阅读次数:
189
RT。由于本人dp很弱(或者说什么都弱),于是决定分模块刷题。单调队列就找了些题目(我水平已经沦落到了普及组qwq)练,顺便把以前做过的题都堆起来。以后做到的题再开新文章。 1.多重背包 不说了,很好推。放许久之前的幼稚代码 1 #include<bits/stdc++.h> 2 using nam ...
分类:
其他好文 时间:
2019-02-22 21:36:42
阅读次数:
196
众所周知,从20 ,21,...,2k-1这k个2的整数次幂中选出若干相加,可以表示出0~2k-1之前的任意整数 所以我可以把Ci个物品分解成p+2个 即若干个2的幂次方为系数的体积(对下面的这些体积进行0/1背包) 20*Vi+...+2p*Vi+Ri*Vi ...
分类:
其他好文 时间:
2019-02-17 00:29:33
阅读次数:
408
01背包退背包 首先dp出01背包数组dp[]。 完全背包退背包 首先dp出完全背包数组dp[]。 还有个比较经典的题 https://www.luogu.org/problemnew/show/P1450 容斥求多重背包方案数。 ...
分类:
其他好文 时间:
2019-02-07 09:25:45
阅读次数:
234
``` #include #include using namespace std; int v[6002], w[6002], s[6002]; int f[6002]; int n, m; //多重背包 int main() { scanf("%d%d",&n,&m); for (int i =... ...
分类:
其他好文 时间:
2019-01-26 20:59:10
阅读次数:
182
多重背包是某个物品可以选择多次,要把对物品数的枚举放在对w枚举外面 分组背包是某组的物品只能选一个,要把对每组物品的枚举放在对w枚举内侧 依赖背包是多层的分组背包,利用树形结构建立依赖关系,每个结点都可以看做分组背包来做 ...
分类:
其他好文 时间:
2019-01-26 12:32:34
阅读次数:
186
? 本题有两个问, 第一个是求最少硬币数,第二个则是求方案 (翻译竟然没写。。。)。 ? 首先,我们来解决第一问。 ? 我们可以很容易想出,这是一个dp,我们设dp[i]表示凑出面值i最少需要多少个硬币,然后打个多重背包就好了。。。于是你就T了。。。 ? 对于多重背包,我们通常使用一种手段: 二进制 ...
分类:
其他好文 时间:
2019-01-21 11:15:04
阅读次数:
186
题目一:传送门 题意:有一个4*4的棋盘,每次翻转一个棋子和它的上下左右的四个棋子,判断翻转多少次之后可以变为纯色的棋盘。 思路:总共有C(0,16)+C(1,16)+C(2,16)+……+C(16,16)=2^16次,所以最多有16个棋子被翻动,然后从(0,0)个棋子开始,依次翻转其他棋子, 判断 ...
分类:
其他好文 时间:
2019-01-12 21:52:35
阅读次数:
191
题意:多重背包模型 n种物品 每个m个 问背包容量下最多拿多少 这里要用二进制优化不然会超时 ...
分类:
系统相关 时间:
2019-01-12 18:31:46
阅读次数:
251
题目描述 题解: 这是个多重背包,但是一般的复杂度是过不去这题的。 所以有二进制优化和单调队列优化。 二进制优化是将数量$n$化为多个数,而且这些数能表示出$1~n$中的任意数。 怎么保证? 想起二进制,我们可以将$n$分为$1+2+4+8+……+k$,$k$可以是任意数。 单调队列怎么优化? 我们 ...
分类:
其他好文 时间:
2019-01-02 10:34:52
阅读次数:
188