add solution2

This commit is contained in:
ShusenTang 2019-11-26 20:49:17 +08:00 committed by GitHub
parent 90575b6745
commit f42f9915af
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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];
}
};
```