Dynamic Programming Definition
Like recursion, dynamic programming is based on solving sub-problems.
Dynamic programming: Main differences from Recursions
- Often the subproblems overlap(if no overlap, we can simply use recursion)
- DP solves each subproblem once and stores the result in a table(reduce the subproblems overlap)
- Typically applied to optimization problems. (not the example above, but we gonna see more examples coming).
Dynamic Programming 常用array 存储防止如同recursion的重复计算。eg, fib(1) + fib(2)
经典问题: coin change
Amazon VO 面试原题
class Solution {
public:
int coinChange(vector<int>& coins, int amount) {
int Max = amount+1;
vector<int> dp(amount+1, Max);
dp[0] = 0;
for(int i = 1; i <= amount; i++){
for(int j = 0; j < coins.size(); j++){
if(coins[j] <= i){
dp[i] = min(dp[i], dp[i-coins[j]]+1);
}
}
}
return dp[amount] > amount? -1:dp[amount];
}
};
同类型题目: 279. Perfect Squares
做完coin change 应该会做279