LeetCode 动态规划

51 阅读1分钟
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