背包问题

 

0-1 背包

 

求 target

416. 分割等和子集(0-1背包)

本题要求把数组分成两个等和的子集,相当于找到一个子集,其和为 sum / 2,这个 sum / 2 就是 target(target 间接给出)。
于是转化为是否可以用 nums 中的数组合和成 target

1049. 最后一块石头的重量 II

有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。

每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:

  • 如果 x == y,那么两块石头都会被完全粉碎;
  • 如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x

最后,最多只会剩下一块 石头。返回此石头 最小的可能重量 。如果没有石头剩下,就返回 0

 

示例 1:

输入:stones = [2,7,4,1,8,1]
输出:1
解释:
组合 2 和 4,得到 2,所以数组转化为 [2,7,1,8,1],
组合 7 和 8,得到 1,所以数组转化为 [2,1,1,1],
组合 2 和 1,得到 1,所以数组转化为 [1,1,1],
组合 1 和 1,得到 0,所以数组转化为 [1],这就是最优值。

从 stonesstones 数组中选择,凑成总和不超过 num/2 的最大价值。

494. 目标和(01背包)

 

给你一个整数数组 nums 和一个整数 target 。

向数组中的每个整数前添加 '+' 或 '-' ,然后串联起所有整数,可以构造一个 表达式 :

例如,nums = [2, 1] ,可以在 2 之前添加 '+' ,在 1 之前添加 '-' ,然后串联起来得到表达式 "+2-1" 。
返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。

 

示例 1:

输入:nums = [1,1,1,1,1], target = 3
输出:5
解释:一共有 5 种方法让最终目标和为 3 。
-1 + 1 + 1 + 1 + 1 = 3
+1 - 1 + 1 + 1 + 1 = 3
+1 + 1 - 1 + 1 + 1 = 3
+1 + 1 + 1 - 1 + 1 = 3
+1 + 1 + 1 + 1 - 1 = 3

 

我们想要的 S = 正数和 - 负数和 = x - y
而已知 x 与 y 的和是数组总和:x + y = sum
可以求出 x = (S + sum) / 2 = target
也就是我们要从 nums 数组里选出几个数,令其和为 target(target 间接给出)。
于是转化为是否可以用 nums 中的数组合和成 target

 

 

三维

 474. 一和零 

879. 盈利计划

 

 


完全背包

 

无序组合数:

518. 零钱兑换 II (dp)

 

给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。

请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。

假设每一种面额的硬币有无限个。 

题目数据保证结果符合 32 位带符号整数。

 

示例 1:

输入:amount = 5, coins = [1, 2, 5]
输出:4
解释:有四种方式可以凑成总金额:
5=5
5=2+2+1
5=2+1+1+1
5=1+1+1+1+1

 

 

 

有序组合数:

70. Climbing Stairs(动态规划 爬台阶,一次只能爬1,2两节,组合) 

377. 组合总和 Ⅳ(dp)

给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。

题目数据保证答案符合 32 位整数范围。

 

示例 1:

输入:nums = [1,2,3], target = 4
输出:7
解释:
所有可能的组合为:
(1, 1, 1, 1)
(1, 1, 2)
(1, 2, 1)
(1, 3)
(2, 1, 1)
(2, 2)
(3, 1)
请注意,顺序不同的序列被视作不同的组合。

 

 

 

求最短组合

322. Coin Change(零钱兑换)

279. 完全平方数(dp完全背包)

139. 单词拆分

 

 

 

 

 

 

背包问题(目录)
01背包 : 背包问题 第一讲

 

【练习】01背包 : 背包问题 第二讲(416. 分割等和子集)

 

【学习&练习】01背包 : 背包问题 第三讲(416. 分割等和子集)

 

完全背包 : 背包问题 第四讲

 

【练习】完全背包 : 背包问题 第五讲(279. 完全平方数)

 

【练习】完全背包 : 背包问题 第六讲(322. 零钱兑换)

 

【练习】完全背包 : 背包问题 第七讲(518. 零钱兑换 II)

 

多重背包 : 背包问题 第八讲

 

多重背包(优化篇)

 

多重背包(优化篇): 背包问题 第九讲

 

多重背包(优化篇): 背包问题 第十讲

 

混合背包 : 背包问题 第十一讲

 

【练习】混合背包
分组背包

 

【练习】分组背包
多维背包

 

【练习】多维背包 : 背包问题 第 * 讲(474. 一和零)
【练习】多维背包 : 背包问题 第 * 讲(879. 盈利计划)
树形背包

 

【练习】树形背包
背包求方案数

 

【练习】背包求方案数 : 背包问题 第 * 讲(494. 目标和)
【练习】背包求方案数 : 背包问题 第 * 讲(879. 盈利计划)
背包求具体方案

 

【练习】背包求具体方案 : 背包问题 第 * 讲(1049. 最后一块石头的重量 II)
泛化背包

 

【练习】泛化背包

 

作者:AC_OIer
链接:https://leetcode-cn.com/problems/coin-change-2/solution/gong-shui-san-xie-xiang-jie-wan-quan-bei-6hxv/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

 

posted @ 2021-11-04 09:26  乐乐章  阅读(35)  评论(0编辑  收藏  举报