随笔分类 -  背包

摘要:P1858 多人背包 题意: 一共有 $K$ 个人,每个人的背包容量相同都为 $V$ ,一共有 $N$ 种物品,每个人每种物品都最多选一个。要求每个人的选的物品总体积必须等于背包的体积。并且要求这 $K$ 个的 选法都不相同,求在满足上面要求的前提下,包里物品的总价值是多少? 思路: 要求总和最大, 阅读全文
posted @ 2022-12-29 11:21 zxr000 阅读(39) 评论(0) 推荐(0)
摘要:HDU 1712 ACboy needs your help 题意: 一共有 $n$ 轮,给出在每一轮中,选择 $y$ 份获得的价值。现在一共可以选择 $m$ 份,求最终获得的最大价值是多少。 思路: 其实相当于每一轮,只能在众多物品中选择一样,其实就是一个典型的分组背包问题了。 实现: #incl 阅读全文
posted @ 2022-12-28 21:19 zxr000 阅读(34) 评论(0) 推荐(0)
摘要:P1833 樱花 题意: 混合背包问题。 思路: 将时间点相减变成限制的一个时间段之后就是一个混合背包的模板。 https://www.cnblogs.com/zxr000/p/16999868.html 实现: #include <bits/stdc++.h> using namespace st 阅读全文
posted @ 2022-12-28 20:24 zxr000 阅读(39) 评论(0) 推荐(0)
摘要:P1853 投资的最大效益 题意: 初始资金为 $s$ ,一共有 $n$ 年,$d$ 种债卷,给出债卷的投资额和年利息,求 $n$ 年后可以获得的最多资金? 思路: 由于每年之间买债卷是互不影响的,所以我们先看一年如何买。 假设当前资金为 $sum$ 然后求怎么买收益最高,其实就是一个多重背包问题。 阅读全文
posted @ 2022-12-28 19:58 zxr000 阅读(57) 评论(0) 推荐(0)
摘要:P1060 开心的金明 题意: 01背包问题 思路: 01背包模板 实现: #include<stdio.h> #include<algorithm> using namespace std; int dp[30005] = {0}; int val[30]; int lev[30]; int ma 阅读全文
posted @ 2022-12-28 19:03 zxr000 阅读(34) 评论(0) 推荐(0)
摘要:POJ 1014 Dividing 题意: 多重背包问题,给出若干物品,求是否能分成价值相同的两堆 思考: 求出总和 $sum$ 之后,如果 $sum$ 是奇数则一定不可能,然后如果我们能凑出 $sum / 2$ 的话,那就可以平分,这里就变成了多重背包问题了。 实现: #include <cstd 阅读全文
posted @ 2022-12-24 17:55 zxr000 阅读(20) 评论(0) 推荐(0)
摘要:POJ 1276 Cash Machine 题意: 多重背包问题 思路: 多重背包模板 实现: #include <cstdio> #include <algorithm> using namespace std; const int N = 100005; int goods[N], f[N]; 阅读全文
posted @ 2022-12-24 11:58 zxr000 阅读(19) 评论(0) 推荐(0)
摘要:POJ 1015 Jury Compromise 题意: 有 $n$ 对数字,要从 $n$ 对数字中选出 $m$ 对,目标是使得第一组的数字和与第二组的数字和的差的绝对值最小。基于差的绝对值最小的基础上,两组数的总和最大,输出两组最后的分数,以及选法。 思路: 类似 $01$ 背包问题,并且需要输出 阅读全文
posted @ 2022-12-23 21:56 zxr000 阅读(41) 评论(0) 推荐(0)
摘要:HDU-2639 Bone Collector || 01背包问题,但是需要输出的是可以获得的第 $k$ 大价值。 思路: 状态定义? 我们要求的是第 $k$ 大价值,所以当我们得到一个当前第 $k + 1$ 大的价值的时候,可以直接舍去,因为它一定不是第 $k$ 大的价值。然后我们又需要知道目前得 阅读全文
posted @ 2022-12-23 14:03 zxr000 阅读(28) 评论(0) 推荐(0)
摘要:Acwing 12. 背包问题求具体方案 01背包问题,但是要求输出 字典序最小的方案数 。 思路: 状态转移方程: $f[i][j] = max(f[i - 1][j],f[i - 1][j - v[i]] + w[i])$ 求具体方案其实就是判断每个物品是否被选,求方案其实就是从 $f[n,m] 阅读全文
posted @ 2022-12-23 13:44 zxr000 阅读(47) 评论(0) 推荐(0)
摘要:P1064 [NOIP2006 提高组] 金明的预算方案 在 P1064 [NOIP2006 提高组] 金明的预算方案 这题中,引入了 主件和附件 的关系 比如说 ~~要求你加入集训队试训之前,一定要刷完专题~~ 一个主件和它的附件集合是几乎对于分组背包中的一个物品组。 每个选择了主件又选择了若干附 阅读全文
posted @ 2022-12-23 11:47 zxr000 阅读(440) 评论(0) 推荐(0)
摘要:P1757 通天之分组背包 有 $N$ 件物品和一个容量为 $V$ 的背包。第 $i$ 件物品的费用是 $C_i$ ,价值是 $W_i$ 。这些物品被划分为 $K$ 组,每组中的物品互相冲突,最多选一件。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。 思路: 将同一组的 阅读全文
posted @ 2022-12-23 10:18 zxr000 阅读(53) 评论(0) 推荐(0)
摘要:P1507 NASA的食物计划: 航天飞机的体积有限,当然如果载过重的物品,燃料会浪费很多钱,每件食品都有各自的体积、质量以及所含卡路里。在告诉你体积和质量的最大值的情况下,请输出能达到的食品方案所含卡路里的最大值,当然每个食品只能使用一次。 思路: 状态定义? 现在不仅仅对提及有限制,还对质量有限 阅读全文
posted @ 2022-12-23 09:51 zxr000 阅读(106) 评论(0) 推荐(0)
摘要:Acwing 7. 混合背包问题 有 $N$ 种物品和一个容量是 $V$ 的背包。 物品一共有三类: 第一类物品只能用 $1$ 次(01背包); 第二类物品可以用无限次(完全背包); 第三类物品最多只能用 $s_i$ 次(多重背包); 每种体积是 $v_i$,价值是 $w_i$。 求解将哪些物品装入 阅读全文
posted @ 2022-12-23 00:35 zxr000 阅读(27) 评论(0) 推荐(0)
摘要:和这道题几乎一模一样:https://www.cnblogs.com/zxr000/p/16999729.html 实现: #include <bits/stdc++.h> using namespace std; const int N = 4e4 + 5; int f[N], n, m; str 阅读全文
posted @ 2022-12-23 00:17 zxr000 阅读(29) 评论(0) 推荐(0)
摘要:单调队列优化法 从公式入手来看是否还有可以改进的地方 $dp[i][j] = max(dp[i - 1][j],dp[i-1][j - v] + w,dp[i-1][j -2 * v] + 2w,...,dp[i-1][j-s_iv]+s_i*w)$ 我们可以发现该方程的第二维是 $j-v,j-2v 阅读全文
posted @ 2022-12-22 23:49 zxr000 阅读(40) 评论(0) 推荐(0)
摘要:二进制优化法 本质: 将多重背包转化为 01背包问题 思路: 暴力法其实相当于把多重背包中的每个物品分成 $s$ 个物品,所以才需要那么久的时间复杂度,所以现在想一下有没有什么分法,可以通过选这些物品,选几个来表示选 $s$ 个的所有可能。 这时候就想到了二进制,因为任何实数都可以由二进制数组成。 阅读全文
posted @ 2022-12-22 22:19 zxr000 阅读(36) 评论(0) 推荐(0)
摘要:4. 多重背包问题 I - AcWing题库 有 $N$ 种物品和一个容量是 $V$ 的背包。 第 $i$ 种物品最多有 $s_i$ 件,每件体积是 $v_i$,价值是 $w_i$。 求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。 输出最大价值? 暴力法: 定义 $f[i] 阅读全文
posted @ 2022-12-22 21:11 zxr000 阅读(37) 评论(0) 推荐(0)