美文网首页
动态规划《一》

动态规划《一》

作者: ZoranLee | 来源:发表于2022-06-17 14:57 被阅读0次

    1、斐波那契数列(暴力递归)

    int fib(int N){
      
    if(N == 1 || N==2){
        return 1;
      }
    return flib(N-1)+flib(N-2);
    }
    
    • 递归树
      f(20)
      f(19) f(18)
      f(18) f(17)
      ...
      时间复杂度为 O(2^n),指数级别

    动态规划问题的第一个性质:重叠子问题

    带备忘录的递归解法

    int fib(int N){
      if(N < 1){
      return 0 ;
    }
    vector<int>memo(N+1,0);
    return helper(memo,N);
    }
    
    int helper(vector<int>& memo ,int n){
    if(n ==1 || n == 2) return 1;
    //已经计算过了
    if(memo[n] != 0){
      return memo[n];
    }
    memo[n] = helper(memo,n-1)+helper(memo,n-2);
    return memo[n];
    }
    

    dp 数组的迭代解法

    int fib(int N){
    vector<int> dp(N+1,0);
    //base
    dp[1]= dp[2] =1;
    for(int i=3;i<=N;i++){
      dp[i]=dp[i-1]+dp[i-2];
    }
    return dp[N];
    }
    
    

    相关文章

      网友评论

          本文标题:动态规划《一》

          本文链接:https://www.haomeiwen.com/subject/nybxvrtx.html