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%。若不满足这个剪枝条件,那么递归下去就是。
|
||||
|
||||
## 思路二
|
||||
熟悉动态规划的童鞋一眼就可以看出这其实就是个背包问题,先挖个坑,改天对背包问题做个总结。
|
||||
熟悉动态规划的童鞋一眼就可以看出这其实就是个背包问题,具体来说是一个恰好装满的完全背包问题,
|
||||
我在我的博客文章[动态规划之背包问题系列](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