目录
概念理解
题型总结
丑数
264. 丑数 II
一个丑数是由2,3,5中的一个与前面已经得到的一个丑数相乘得来。
同类型的题目还有:313. 超级丑数,17.09. 第 k 个数
背包问题
01背包
有N件物品和一个最多能被重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。
二维数组
数组dp[i][j] =new int[N][W+1]
-
确定dp数组以及下标的含义
dp[i][j] 表示从下标为[0-i]的物品里任意取,放进容量为j的背包,价值总和最大是多少。 -
确定递推公式
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);
-
初始化
dp[i][0] = 0
遍历第一个物品的时候,对于大于value[0]的空间最多取到value[0]。 -
遍历顺序:
01背包二维dp数组在遍历顺序上,外层遍历物品 ,内层遍历背包容量和外层遍历背包容量 ,内层遍历物品都是可以的!
一维数组
-
确定dp数组的定义:
在一维dp数组中,dp[j]表示:容量为j的背包,所背的物品价值可以最大为dp[j]。 -
确定递推公式
dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);
-
初始化
dp[i][0] = 0
-
遍历顺序:
一定是外层for循环遍历物品,内层for循环遍历背包容,并且只能是从右向左遍历,目的是防止覆盖上一轮的遍历结果。 -
核心代码