当前位置:   article > 正文

代码随想录算法训练营day41

代码随想录算法训练营day41

343. 整数拆分

五部曲

  • dp数组下标及含义:dp[i]表示第i个位置最大乘积
  • dp数组初始化:dp[2]=1
  • 递推公式:dp[i] = max({dp[i], (i - j) * j, dp[i - j] * j});
  • 遍历方向:从前往后遍历
  • dp数组推到举例:
    2 3 4 5 6 7 8 9 10
    1 2 4 6 9 12 18 27 36
class Solution {
public:
    int integerBreak(int n) {
        vector<int> dp(n+1);
        dp[2]=1;
        for(int i=3;i<=n;i++){
            for(int j =1;j<=i;j++){
                dp[i] = max(dp[i],max((i-j)*j,dp[i-j]*j));
            }
        }
        return dp[n];
    }
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

96.不同的二叉搜索树

五部曲:

  • dp数组下标及含义:dp[i]表示1到i个节点二叉搜索树个数
  • dp数组初始化:dp[0]=1
  • 递推公式:dp[i] += dp[j - 1] * dp[i - j]
  • 遍历方向:遍历i前每一个数作为头节点的数目
  • dp数组推到举例:
    0 1 2 3
    1 1 2 5
class Solution {
public:
    int numTrees(int n) {
        vector<int> dp(n + 1);
        dp[0] = 1;
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= i; j++) {
                dp[i] += dp[j - 1] * dp[i - j];
            }
        }
        return dp[n];
    }
};
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/660317
推荐阅读
相关标签
  

闽ICP备14008679号