mirror of
https://github.com/ShusenTang/LeetCode.git
synced 2024-09-02 14:20:01 +00:00
add solution2
This commit is contained in:
parent
90575b6745
commit
f42f9915af
@ -15,7 +15,8 @@
|
|||||||
这个剪枝很关键,少了这个剪枝就会超时,加上这个剪枝直接击败99%。若不满足这个剪枝条件,那么递归下去就是。
|
这个剪枝很关键,少了这个剪枝就会超时,加上这个剪枝直接击败99%。若不满足这个剪枝条件,那么递归下去就是。
|
||||||
|
|
||||||
## 思路二
|
## 思路二
|
||||||
熟悉动态规划的童鞋一眼就可以看出这其实就是个背包问题,先挖个坑,改天对背包问题做个总结。
|
熟悉动态规划的童鞋一眼就可以看出这其实就是个背包问题,具体来说是一个恰好装满的完全背包问题,
|
||||||
|
我在我的博客文章[动态规划之背包问题系列](https://tangshusen.me/2019/11/24/knapsack-problem/)中对常见的几类背包问题做了个总结,此题的分析见5.2节,这里只给出代码。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -47,4 +48,23 @@ public:
|
|||||||
```
|
```
|
||||||
|
|
||||||
## 思路二
|
## 思路二
|
||||||
TODO
|
``` C++
|
||||||
|
class Solution {
|
||||||
|
public:
|
||||||
|
int coinChange(vector<int>& coins, int amount) {
|
||||||
|
vector<int>dp(amount + 1, INT_MAX);
|
||||||
|
dp[0] = 0;
|
||||||
|
|
||||||
|
for(int i = 1; i <= coins.size(); i++)
|
||||||
|
for(int j = coins[i-1]; j <= amount; j++){
|
||||||
|
// 下行代码会在 1+INT_MAX 时溢出
|
||||||
|
// dp[j] = min(dp[j], 1 + dp[j - coins[i-1]]);
|
||||||
|
if(dp[j] - 1 > dp[j - coins[i-1]])
|
||||||
|
dp[j] = 1 + dp[j - coins[i-1]];
|
||||||
|
}
|
||||||
|
|
||||||
|
return dp[amount] == INT_MAX ? -1 : dp[amount];
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
```
|
||||||
|
Loading…
Reference in New Issue
Block a user