背包
qq_38232157
这个作者很懒,什么都没留下…
展开
-
一本通 1266:【例9.10】机器分配(线性DP, 输出具体方案)
线性DP, 输出具体方案原创 2022-10-31 22:00:33 · 317 阅读 · 0 评论 -
一本通 1272:【例9.16】分组背包(分组背包模板题)
分组背包模板题原创 2022-10-25 04:14:29 · 526 阅读 · 2 评论 -
一本通 1295:装箱问题(01背包)
01背包原创 2022-10-25 04:07:45 · 352 阅读 · 0 评论 -
一本通 1271:【例9.15】潜水员(二维费用背包)
二维费用背包原创 2022-10-25 01:29:42 · 182 阅读 · 0 评论 -
一本通 1270:【例9.14】混合背包(混合背包模板题)
混合背包模板题原创 2022-10-24 23:46:19 · 811 阅读 · 0 评论 -
HOJ 2159 FATE(完全背包)
完全背包k 个怪物, 每打一个怪物有经验, 消耗忍耐度。 可以把 经验看做是 价值 w[i], 忍耐度看做是体积 v[i].题目转化为, 用一个体积为 m 的背包,装一些物品(每一个物品可以装无限次), 取得的最大价值。裸的完全背包题目。本题要点:1、n <= 100, 可开二维数组。 但是,这里有个限制,取的物品总数不能超过 s 个。所用,需要一个数组 mp[MaxN][MaxN]来计数, 以保证取物品,不超过 s 个。2、f[i][j] 表示 从前i个物品中,选出总体积是j的物品,最原创 2020-09-19 15:20:03 · 181 阅读 · 0 评论 -
HOJ 1864 最大报销额(01 背包)
01 背包每一种发票,要么拿,要么不拿本题要点:1、判断发票的有效性(每次报销,都有一个最大报销额度 max_val):(a) 发票的总价值不能超过 1000 或 max_val(b) 发票的单类型报销额度不能超过 600(c) 类型只能是 ‘A’, ‘B’, ‘C’。出现其他类型,次发票无效。2、解决了发票的有效性,后面就是套用 01 背包的模板。 n 张发票,看做是n个物品,每个物品的体积为1.然后有一个背包容量大小是 n 的背包,从n个物品中取若干个,得到的最大价值是多少。 有个附加条原创 2020-09-19 12:29:24 · 362 阅读 · 1 评论 -
HOJ 3466 Proud Merchants(01背包,贪心)
01背包,贪心题目意思:给出可以使用的钱数和商品数量,每个商品购买时需要手中还有的钱数q[i],问可以获得的最大价值。本题要点:1、贪心: 因为买每件商品的条件是当前的钱,比 q[i]大(q[i] >= p[i]),而不仅仅比该商品的 价格 p[i] 大。因此,商品的出现顺序,会对最后的结果又影响。而普通 01 背包,物品的顺序对最后结果没有影响。如果有两个物品,A:p1,q1 B: p2,q2,若先买A,则至少需要p1+q2的钱,而先买B则至少需要p2+q1,如果p1+q2>p2+原创 2020-07-17 00:28:44 · 111 阅读 · 0 评论 -
POJ 1717 Dominoes(背包)
题目意思:多米诺骨牌有上下2个方块组成,每个方块中有1~6个点。现有排成行的上方块中点数之和记为S1,下方块中点数之和记为S2,它们的差为|S1-S2|。例如在图8-1中,S1=6+1+1+1=9,S2=1+5+3+2=11,|S1-S2|=2。每个多米诺骨牌可以旋转180°,使得上下两个方块互换位置。编程用最少的旋转次数使多米诺骨牌上下2行点数之差达到最小。本题要点:1、转态表示:dp[i][j] 表示 处理前i个多米诺骨牌, 使得其上和 减下和的 差值为j的最少翻转次数。因为差值 j可原创 2020-07-05 16:04:06 · 134 阅读 · 0 评论 -
POJ 1948 Triangular Pastures(背包,经典)
题目意思:给出n条边,然后用这n条边组成一个三角形,求该该三角形的最大面积。本题要点:1、转态表示:dp[i][j] 表示三角形第一条边是i, 第二条边是j的 三角形是否存在。(i >= j)3、 转态转移:if(dp[i][j]) // 扫描第k条边的时候{dp[i + a[k]][j] = dp[i][j + a[k]] = 1; }4、 三条边能组成三角形的充要条件是:任意两条边的和大于第三条边。假设所有线段的总和是 s,这些线段组成的三角形的最长边是 m = s原创 2020-07-05 15:48:22 · 131 阅读 · 0 评论 -
POJ 3624 Charm Bracelet(01背包,裸题)
题目意思:有N个物品,分别有不同的重量Wi和价值Di,Bessie只能带走重量不超过M的物品,要是总价值最大,并输出总价值。本题要点:1、裸的 01背包题目。参考代码 :《算法竞赛进阶指南》 276页。开一维数组 dp2、状态表示:dp[j] 表示 背包中放入总体积为j的物品的最大价值。#include <cstdio>#include <cstring>#include <iostream>using namespace std;const in原创 2020-07-05 15:34:59 · 125 阅读 · 0 评论 -
POJ 3628 Bookshelf 2(搜索)
题目意思:其实很简单啦就是给你n个高度,让你挑其中的几个摞起来。要求摞起来以后的总高度超过b,问你这样的高度的最小值是多少。本题要点:1、暴搜:首先,n最大值是20, 很小,可以暴搜, 复杂度 O(2^20)2、 dfs(int x, int sum) x 表示当前处理到的下标(1 ~ x - 1 都处理完了)。sum 表示 已经当前已经累加的高度。每次 dfs, 可以选择这个身高 w[x], dfs(x + 1, sum + w[x]);也可以不选择 dfs(x + 1, sum);原创 2020-07-05 15:29:20 · 113 阅读 · 0 评论 -
POJ 1276 Cash Machine(分组背包,经典)
题目意思:给出金钱数和N种不同的钱币数量和面额,求出这n种面额能够凑出的不大于给出金钱数的最大值本题要点:1、多重背包,二进制拆分法:(参考 《算法竞赛进阶指南》 280页)币值为 money[i], 数量为 cnt[i] 的硬币,拆分为 2^0, 2^1, 2^2, …, 2^p , r (r = cnt[i] - 2^0 - 2^1 - 2^2 - … - 2^p)组硬币, 每组硬币的 体积为 2^k (0 <= k <= p),价值是 money[i] * 2^k 。这种方法原创 2020-07-05 15:21:19 · 156 阅读 · 0 评论 -
POJ 1384 Piggy-Bank(完全背包,裸题)
题目意思:给你一个储蓄罐空的,和满的重量,然后给出各种硬币的价值和对应的重量,要你估计出储蓄罐里面硬币价值和最小为多少,注意要保证重量和恰好为给出满的重量。本题要点:1、完全背包的裸题:背包容量,就是储蓄罐中硬币的重量(满罐 - 空罐);物品的体积,就是硬币的重量;物品的价值,就是硬币的面值。2、dp[i] 表示体积为i的背包,能装的物品最小价值之和转态转移:dp[j] = min(dp[j], dp[j - v[i]] + w[i]); // 能装下 v[i]时候,取较小值#incl原创 2020-07-05 14:55:09 · 214 阅读 · 0 评论 -
POJ 2063 Investment(完全背包,模板题)
题目意思:给你一笔金额,你要将这比金额去投资,现在有t种股票,每种股票都有一个价值和年收益,问你如何投资在n年后的最大收益并且股票的价值都是1000的倍数,所以后面优化,对每个价值除以1000测试数据:1 //有多少组测试数据10000 4 //10000代表初始金额,4代表4年之后的最大收益2 //有两种股票4000 400 //接下来2行,每行分别代表每种股票的价值与年收益3000 250本题要点:1、完全背包,套用模板:每笔投资的买入价相当于物品的体积 v[i],原创 2020-07-05 14:46:45 · 155 阅读 · 0 评论 -
CH5202 自然数拆分Lunatic版(算法竞赛进阶指南,完全背包)
算法竞赛进阶指南,278页,完全背包本题要点:1、把完全背包的代码改改即可。常规的完全背包:有n个物品,每个物品的体积是v[i], 价值是w[i], 求装到大小为m的大背包,能获得的最大价值(每个物品可以选任意多次)。f[j]表示到小为i的背包,最多能获得的最大价值f[j] = max(f[j], f[j - v[i]] + w[i]); // j从小到大扫描2、题目意思转换:有n个物品,每个物品的体积是v[i], 价值是1, 求装到大小为m的大背包,一共有多少种装法。f[j]表示到小为i的原创 2020-07-02 22:48:18 · 176 阅读 · 0 评论 -
CH 5201 数字组合(算法竞赛进阶指南,01背包)
算法竞赛进阶指南,277页,01背包本题要点:1、把01背包的代码改改即可。常规的01背包:有n个背包,每个物品的体积是v[i], 价值是w[i], 求装到大小为m的大背包,能获得的最大价值。f[j]表示到小为i的背包,最多能获得的最大价值f[j] = max(f[j], f[j - v[i]] + w[i]);2、题目意思转换:有n个背包,每个物品的体积是v[i], 价值是1, 求装到大小为m的大背包,一共有多少种装法。f[j]表示到小为i的背包, 一共有多少种装法:f[j] = f[j原创 2020-07-02 20:32:54 · 266 阅读 · 0 评论