![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
背包问题
文章平均质量分 71
yuzhang_zy
现在的我不是最好的我,未来的我才是最好的我,每一篇博客都记录着我的成长
展开
-
734 能量石(贪心 + 零一背包问题)
1. 问题描述:岩石怪物杜达生活在魔法森林中,他在午餐时收集了 N 块能量石准备开吃。由于他的嘴很小,所以一次只能吃一块能量石。能量石很硬,吃完需要花不少时间。吃完第 i 块能量石需要花费的时间为 Si 秒。杜达靠吃能量石来获取能量。不同的能量石包含的能量可能不同。此外,能量石会随着时间流逝逐渐失去能量。第 i 块能量石最初包含 Ei 单位的能量,并且每秒将失去 Li 单位的能量。当杜达开始吃一块能量石时,他就会立即获得该能量石所含的全部能量(无论实际吃完该石头需要多少时间)。能量石中包含的能量最多降低原创 2021-09-15 22:48:58 · 251 阅读 · 0 评论 -
11 背包问题求方案数
1. 问题描述:有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最优选法的方案数。注意答案可能很大,请输出答案模10 ^ 9 + 7的结果。输入格式第一行两个整数N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值。输出格式输出一个整数,表示 方案数模10 ^ 9 +原创 2021-09-15 15:57:35 · 300 阅读 · 0 评论 -
10 有依赖的背包问题(分组背包问题 + 树形dp)
1. 问题描述:有 N 个物品和一个容量是 V 的背包。物品之间具有依赖关系,且依赖关系组成一棵树的形状。如果选择一个物品,则必须选择它的父节点。如下图所示:如果选择物品5,则必须选择物品1和2。这是因为2是5的父节点,1是2的父节点。每件物品的编号是 i,体积是 vi,价值是 wi,依赖的父节点编号是 pi。物品的下标范围是 1…N。求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行有两个整数 N,V,用空格隔开,分别表示物品个数和背包容量。原创 2021-09-15 11:46:30 · 3401 阅读 · 0 评论 -
7 混合背包问题
1. 问题描述:有 N 种物品和一个容量是 V 的背包。物品一共有三类:第一类物品只能用1次(01背包);第二类物品可以用无限次(完全背包);第三类物品最多只能用 si 次(多重背包);每种体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式第一行两个整数N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行三个整数 vi,wi,si,用空格隔开,分别表示第 i 种物品的体积、价值和数量。si =原创 2021-09-13 21:00:17 · 293 阅读 · 0 评论 -
532 货币系统(完全背包问题)
1. 问题描述:在网友的国度中共有 n 种不同面额的货币,第 i 种货币的面额为 a[i],你可以假设每一种货币都有无穷多张。为了方便,我们把货币种数为 n、面额数组为 a[1..n] 的货币系统记作 (n,a)。在一个完善的货币系统中,每一个非负整数的金额 x 都应该可以被表示出,即对每一个非负整数 x,都存在n个非负整数 t[i] 满足 a[i]×t[i] 的和为 x。然而,在网友的国度中,货币系统可能是不完善的,即可能存在金额 x 不能被该货币系统表示出。例如在货币系统 n = 3,a=[2,5,原创 2021-09-13 15:01:27 · 7515 阅读 · 0 评论 -
1021 货币系统(完全背包问题求方案数)
1. 问题描述:给你一个n种面值的货币系统,求组成面值为m的货币有多少种方案。输入格式第一行,包含两个整数n和m。接下来n行,每行包含一个整数,表示一种货币的面值。输出格式共一行,包含一个整数,表示方案数。数据范围n ≤ 15,m ≤ 3000输入样例:3 10125输出样例:10来源:2. 思路分析:分析题目可以知道我们需要选择一些面值的货币,使得选择这些货币最终恰好能够组成面值为m的货币,求解能够恰好组成面值为m的方案数目;每种面值的货币都是可原创 2021-09-12 22:23:44 · 424 阅读 · 0 评论 -
487 金明的预算方案(分组背包问题扩展)
1. 问题描述:金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:"你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行"。今天一早,金明就开始做预算了,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是一些主件与附件的例子:如果要买归类为附件的物品,必须先买该附件所属的主件。每个主件可以有0个、1个或2个附件。附件不再有从属于自己的附件。金明想买的东西很多,肯定会超过妈妈限定的N元。于是,他把每件原创 2021-09-12 16:27:18 · 262 阅读 · 0 评论 -
1013 机器分配(多重与分组背包问题扩展)
1. 问题描述:总公司拥有M台相同的高效设备,准备分给下属的N个分公司。各分公司若获得这些设备,可以为国家提供一定的盈利。盈利与分配的设备数量有关。问:如何分配这M台设备才能使国家得到的盈利最大?求出最大盈利值。分配原则:每个公司有权获得任意数目的设备,但总台数不超过设备数M。输入格式第一行有两个数,第一个数是分公司数N,第二个数是设备台数M;接下来是一个N * M的矩阵,矩阵中的第 i 行第 j 列的整数表示第 i 个公司分配 j 台机器时的盈利。输出格式第一行输出最大盈利值;接下N行原创 2021-09-11 22:34:02 · 307 阅读 · 0 评论 -
12 背包问题求具体方案(零一背包问题求具体方案)
1. 问题描述:2. 思路分析:3. 代码如下:if __name__ == '__main__': n, V = map(int, input().split()) # 先存储0这个元素后面可以保证下标从1开始 v, w = [0], [0] # 先存储物品的体积和价值这样方面后面倒着递推 for i in range(n): _v, _w = map(int, input().split()) v.append原创 2021-09-11 16:48:16 · 456 阅读 · 0 评论 -
3 完全背包问题
1. 问题描述:有 N 种物品和一个容量是 V 的背包,每种物品都有无限件可用。第 i 种物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 种物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围0 < N,V ≤ 10000 < vi,wi ≤原创 2021-09-11 15:07:00 · 167 阅读 · 0 评论 -
4 多重背包问题 I(零一背包问题的扩展)
1. 问题描述:有 N 种物品和一个容量是 V 的背包。第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行三个整数 vi,wi,si,用空格隔开,分别表示第 i 种物品的体积、价值和数量。输出格式输出一个整数,表示最大价值。数据范围0< N,V ≤ 1000< vi,wi,s原创 2021-09-09 22:31:58 · 302 阅读 · 0 评论 -
278 数字组合(零一背包扩展求方案数目)
1. 问题描述:给定 N 个正整数 A1,A2,…,AN,从中选出若干个数,使它们的和为 M,求有多少种选择方案。输入格式第一行包含两个整数 N 和 M。第二行包含 N 个整数,表示 A1,A2,…,AN。输出格式包含一个整数,表示可选方案数。数据范围1 ≤ N ≤ 100,1 ≤ M ≤ 10000,1 ≤ Ai ≤ 1000,答案保证在 int 范围内。输入样例:4 41 1 2 2输出样例:3来源:https://www.acwing.com/p原创 2021-09-09 21:10:49 · 536 阅读 · 0 评论 -
1022 宠物小精灵之收服(二维费用的零一背包问题)
1. 问题描述:宠物小精灵是一部讲述小智和他的搭档皮卡丘一起冒险的故事。一天,小智和皮卡丘来到了小精灵狩猎场,里面有很多珍贵的野生宠物小精灵。小智也想收服其中的一些小精灵。然而,野生的小精灵并不那么容易被收服。对于每一个野生小精灵而言,小智可能需要使用很多个精灵球才能收服它,而在收服过程中,野生小精灵也会对皮卡丘造成一定的伤害(从而减少皮卡丘的体力)。当皮卡丘的体力小于等于0时,小智就必须结束狩猎(因为他需要给皮卡丘疗伤),而使得皮卡丘体力小于等于0的野生小精灵也不会被小智收服。当小智的精灵球用完时,原创 2021-09-09 09:50:23 · 184 阅读 · 0 评论 -
1024 装箱问题(零一背包问题)
1. 问题描述:有一个箱子容量为 V,同时有 n 个物品,每个物品有一个体积(正整数)。要求 n 个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。输入格式第一行是一个整数 V,表示箱子容量。第二行是一个整数 n,表示物品数。接下来 n 行,每行一个正整数(不超过10000),分别表示这 n 个物品的各自体积。输出格式一个整数,表示箱子剩余空间。数据范围0 < V ≤ 20000,0 < n ≤ 30输入样例:2468312797输原创 2021-09-08 21:30:54 · 620 阅读 · 0 评论 -
518 零钱兑换 II(完全背包问题)
1. 问题描述:给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。假设每一种面额的硬币有无限个。题目数据保证结果符合 32 位带符号整数。示例 1:输入:amount = 5, coins = [1, 2, 5]输出:4解释:有四种方式可以凑成总金额:5=55=2+2+15=2+1+1+15=1+1+1+1+1示例 2:输入:amount = 3, c.原创 2021-07-18 21:29:07 · 222 阅读 · 0 评论 -
474 一和零(二维费用的零一背包问题)
1. 问题描述:给你一个二进制字符串数组 strs 和两个整数 m 和 n 。请你找出并返回 strs 的最大子集的大小,该子集中最多有 m 个 0 和 n 个 1 。如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的子集 。示例 1:输入:strs = ["10", "0001", "111001", "1", "0"], m = 5, n = 3输出:4解释:最多有 5 个 0 和 3 个 1 的最大子集是 {"10","0001","1","0"} ,因此答案是 4 。原创 2021-07-09 10:15:02 · 142 阅读 · 0 评论 -
二维费用的零一背包问题(动态规划)
1. 问题描述:有 N 件物品和一个容量是 V 的背包,背包能承受的最大重量是 M。每件物品只能用一次。体积是 vi,重量是 mi,价值是 wi。求解将哪些物品装入背包,可使物品总体积不超过背包容量,总重量不超过背包可承受的最大重量,且价值总和最大。输出最大价值。输入格式第一行两个整数,N,V,M,用空格隔开,分别表示物品件数、背包容积和背包可承受的最大重量。接下来有 N 行,每行三个整数 vi,mi,wi,用空格隔开,分别表示第 i 件物品的体积、重量和价值。输出格式输出一个整数,原创 2021-07-09 09:38:56 · 487 阅读 · 0 评论 -
416 分割等和子集(零一背包)
1. 问题描述:给你一个只包含正整数的非空数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。示例 1:输入:nums = [1,5,11,5]输出:true解释:数组可以分割成 [1, 5, 5] 和 [11] 。、示例 2:输入:nums = [1,2,3,5]输出:false解释:数组不能分割成两个元素和相等的子集。提示:1 <= nums.length <= 2001 <= nums[i] <= 100来原创 2021-06-24 23:03:01 · 167 阅读 · 0 评论 -
377 组合总和 Ⅳ(动态规划-枚举位置)
1. 问题描述:2. 思路分析:3. 代码如下:原创 2021-06-19 16:01:30 · 243 阅读 · 0 评论 -
322 零钱兑换(完全背包)
1. 问题描述:给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。你可以认为每种硬币的数量是无限的。示例1:输入:coins = [1, 2, 5], amount = 11输出:3解释:11 = 5 + 5 + 1示例 2:输入:coins = [2], amount = 3输出:-1示例 3:输入:coins = [1], amount = 0输出:0..原创 2021-06-08 11:26:03 · 156 阅读 · 0 评论 -
279 完全平方数(完全背包、数学)
1. 问题描述:给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。给你一个整数 n ,返回和为 n 的完全平方数的最少数量 。完全平方数是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。示例1:输入:n = 12输出:3解释:12 = 4 + 4 + 4示例 2:输入:n = 13输出:2解释:13..原创 2021-05-21 21:43:55 · 437 阅读 · 0 评论 -
完全背包(动态规划)
1. 问题描述:有 N 种物品和一个容量是 V 的背包,每种物品都有无限件可用。第 i 种物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 种物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤10000<vi,wi≤1000输入样原创 2021-05-21 20:37:47 · 190 阅读 · 0 评论 -
零一背包问题(一维列表逆序的解释)
1. 问题描述:有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品数量和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围0<N,V≤10000<vi,wi≤1000输入样例4 51原创 2021-04-22 15:19:58 · 659 阅读 · 1 评论 -
codeforces(排序 + 01背包)
1. 问题描述:牛牛正在打一场CF,比赛时间为T分钟,有N道题,可以在比赛时间内的任意时间提交代码,第i道题的分数为maxPoints[i],题目的分数随着比赛的进行,每分钟减少pointsPerMinute[i],这是一场比较dark的Cf,分数可能减成负数,已知第i道题需要花费 requiredTime[i] 的时间解决,请问最多可以得到多少分?输入描述:第一行输入两个整数N,T (1 ≤ N ≤ 50, 1 ≤ T ≤ 100000)第二行输入n个整数maxPoints[i]第三行输入n原创 2021-04-23 09:44:38 · 486 阅读 · 0 评论