DP

动态规划

我现在暂时讲不清楚

以后再说…

70.爬楼梯

如图

解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public:
int climbStairs(int n) {
if(n == 1) return 1;
if(n == 2) return 2;
vector<int> dp(n+1);
dp[1] = 1;
dp[2] = 2;
for(int i = 3; i <= n; i++){
dp[i] = dp[i-1] + dp[i-2]; //orz
}
return dp[n];
}
};

118.杨辉三角

如图

解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution {
public:
vector<vector<int>> generate(int numRows) {
vector<vector<int>> res;
for(int i = 0; i < numRows; i++){
vector<int> row(i+1,1);

for(int j = 1; j < i; j++){
row[j] = res[i-1][j-1] + res[i-1][j]; //ez
}
res.push_back(row);
}
return res;
}
};

198.打家劫舍

如图

解:

动态规划(DP)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution {
public:
int rob(vector<int>& nums) {
int n = nums.size();
if(n == 0) return 0;
if(n == 1) return nums[0];
vector<int> dp(n);
dp[0] = nums[0];
dp[1] = max(nums[0],nums[1]);
for(int i = 2; i < n; i++){
dp[i] = max(nums[i] + dp[i-2],dp[i-1]); //思索...
}
return dp[n-1];
}
};

279.完全平方数

如图

解:

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public:
int numSquares(int n) {
vector<int> dp(n+1, INT_MAX);
dp[0] = 0;
for(int i = 1; i <= n; i++){
for(int j = 1; j * j <= i; j++){
dp[i] = min(dp[i], dp[i - j * j] + 1); //思考...
}
}
return dp[n];
}
};

322.零钱兑换

如图

解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public:
int coinChange(vector<int>& coins, int amount) {
vector<int> dp(amount + 1, amount + 1);
dp[0] = 0;

for(int i = 1; i <= amount; i++) {
for(int coin : coins) {
if(i - coin >= 0) {
dp[i] = min(dp[i], dp[i - coin] + 1);
}
}
}

return dp[amount] > amount ? -1 : dp[amount];
}
};

DP
https://roxy5201314.github.io/2026/01/19/DP/
作者
roxy
发布于
2026年1月19日
更新于
2026年3月4日
许可协议