- lc509. 斐波那契数
- lc70. 爬楼梯
- lc746. 使用最小花费爬楼梯
- lc62. 不同路径
- lc63. 不同路径 II
- lc343. 整数拆分(没想出来dp[i]表示i可以拆出乘积的最大值)
- lc96. 不同的二叉搜索树
class Solution {
public:
int numTrees(int n) {
vector<int> dp(n + 1);
dp[0] = 1;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
dp[i] += dp[j - 1] * dp[i - j];
}
}
return dp[n];
}
};
j代表头结点的遍历元素
- lc416. 分割等和子集:01背包->最后如果容量为总和一半的背包能装满就证明是true
- lc1049. 最后一块石头的重量 II: 尽量分成重量相等的两堆,用容量为sum/2的袋子尽量装满,再去用总和减去(袋子*2)
- lc494. 目标和:dp[j]+=dp[j-nums[i]],求方法数的题
- lc474. 一和零:两个维度的01背包,过于牛马
- lc518. 零钱兑换 II:完全背包求组合数
- lc377. 组合总和 Ⅳ :有个坑,超范围直接一手unsigned long long
for(int j = 0; j <= bagWeight; j++) {
for(int i = 0; i < weight.size(); i++) {
if (j - weight[i] >= 0) dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);
}
cout << endl;
}
class Solution {
public:
int coinChange(vector<int>& coins, int amount) {
vector<int> dp(amount + 1, INT_MAX);
dp[0] =