动态规划 part3

首先就是你完全可以生成一个vector dp(n+1) 这种 多一个元素的 这样你就能和下标对应了 即使浪费了一点点的空间 

class Solution {

public:

    int integerBreak(int n) {

        vector  dp (n+1);

        dp[2]=1;

        for(int i=3;i<=n;i++){

            for(int j=1;j<=i/2;j++){

                dp[i]=max(dp[i],max((i-j)*j,dp[i-j]*j));

            }

        }

        return dp[n];

    }

};

另外就是这个j要小于等于n/2 因为如果是偶数的话 要拆分成一半

你做树的题 还是要左子树和右子树分开来看!!!

class Solution {

public:

    int numTrees(int n) {

        vector  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];

    }

};

 

你可能感兴趣的:(动态规划,算法)