背包九讲
文章平均质量分 57
追光者2020
没有实力的愤怒毫无意义。
展开
-
leetcode 118 杨辉三角 and 119杨辉三角Ⅱ(01背包优化部分)
题目描述给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。示例 1:输入: numRows = 5输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例 2:输入: numRows = 1输出: [[1]]提示:1 <= numRows <= 30class Solution {public: vector<vector<int>&原创 2021-09-09 09:26:21 · 105 阅读 · 0 评论 -
零钱兑换系列 LeetCode 322 零钱兑换 and LeetCode 518. 零钱兑换 II(完全背包的应用)
给定不同面额的硬币 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示例 4:输入:coins原创 2021-06-15 10:46:30 · 117 阅读 · 0 评论 -
LeetCode 279 完全平方数(完全背包的应用)
给定正整数 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 = 4 + 9可以将完全原创 2021-06-13 21:59:57 · 90 阅读 · 0 评论 -
leetcode 139 单词拆分(完全背包的应用)
题目描述给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入: s = “leetcode”, wordDict = [“leet”, “code”]输出: true解释: 返回 true 因为 “leetcode” 可以被拆分成 “leet code”。示例 2:输入: s = “applepenapple”, wordDi原创 2021-06-09 09:57:05 · 97 阅读 · 0 评论 -
LeetCode 416 分割等和子集 Leetcode 494 目标和(01背包的应用)
题目描述给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。示例 1:输入:nums = [1,5,11,5]输出:true解释:数组可以分割成 [1, 5, 5] 和 [11] 。示例 2:输入:nums = [1,2,3,5]输出:false解释:数组不能分割成两个元素和相等的子集。为什么可以转化为01背包?物品选择方式只有两种要么选择,要么不选择,这些数字可以看做是背包中的物品。与01背包不同的是,01背包的容量原创 2021-06-09 09:49:01 · 110 阅读 · 0 评论 -
LeetCode 474 一和零(二维费用背包应用)
题目描述给你一个二进制字符串数组 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-06-06 18:27:39 · 103 阅读 · 0 评论 -
day1:01背包问题(动态规划)
问题描述:有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。**求解:**将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。样例:输入样例4 51 22 43 44 5输出样例:8基础版本代码:(闫式分析法,小哥哥太强啦)主要寻找状态方程,分为两部分:状态方程f(i,j):要明确集合与属性,集合指的是所有只考虑前 i 个物品,总重量不超过 j 的物品的集合;求解最大值,即f(N,V)原创 2020-06-24 10:25:57 · 943 阅读 · 0 评论 -
day53:分组背包(DP)
问题描述:有 N 组物品和一个容量是 V 的背包。每组物品有若干个,同一组内的物品最多只能选一个。每件物品的体积是 vij,价值是 wij,其中 i 是组号,j 是组内编号。求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行有两个整数 N,V,用空格隔开,分别表示物品组数和背包容量。接下来有 N 组数据:每组数据第一行有一个整数 Si,表示第 i 个物品组的物品数量;每组数据接下来有 Si 行,每行有两个整数 vij,wij,用空格隔开,分别表示第 i原创 2020-07-19 18:40:24 · 136 阅读 · 0 评论 -
day53:二维费用的背包问题(DP)
问题描述:有 N 件物品和一个容量是 V 的背包,背包能承受的最大重量是 M。每件物品只能用一次。体积是 vi,重量是 mi,价值是 wi。求解将哪些物品装入背包,可使物品总体积不超过背包容量,总重量不超过背包可承受的最大重量,且价值总和最大。输出最大价值。输入格式第一行两个整数,N,V,M,用空格隔开,分别表示物品件数、背包容积和背包可承受的最大重量。接下来有 N 行,每行三个整数 vi,mi,wi,用空格隔开,分别表示第 i 件物品的体积、重量和价值。输出格式输出一个整数,表示最大价值。数据原创 2020-07-19 18:22:51 · 160 阅读 · 0 评论 -
day52:混合背包(DP)
问题描述:有 N 种物品和一个容量是 V 的背包。物品一共有三类:第一类物品只能用1次(01背包);第二类物品可以用无限次(完全背包);第三类物品最多只能用 si 次(多重背包);每种体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行三个整数 vi,wi,si,用空格隔开,分别表示第 i 种物品的体积、价值和数量。si=−1 表示原创 2020-07-18 09:41:10 · 155 阅读 · 0 评论 -
day52:多重背包问题Ⅰand Ⅱ and Ⅲ(动态规划)
问题描述:有 N 种物品和一个容量是 V 的背包。第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行三个整数 vi,wi,si,用空格隔开,分别表示第 i 种物品的体积、价值和数量。输出格式:输出一个整数,表示最大价值。数据范围0<N,V≤1000<vi,wi,si≤100输入样例4原创 2020-07-17 09:02:06 · 320 阅读 · 0 评论 -
day51:完全背包(动态规划)
问题描述:有 N 种物品和一个容量是 V 的背包,每种物品都有无限件可用。第 i 种物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。输入格式第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 种物品的体积和价值。输出格式输出一个整数,表示最大价值。数据范围:0<N,V≤1000,0<vi,wi≤1000输入样例4 51原创 2020-07-16 18:21:10 · 236 阅读 · 0 评论