动态规划(2)

63不同路径2

遇到障碍,说明该点无法到达,那么dp[i][j]=0

class Solution {
public:
    int slnA(vector<vector<int>>& obstacleGrid)
    {
        int m=obstacleGrid.size();
        int n=obstacleGrid[0].size();
        vector<vector<int>> dp(m,vector<int>(n,0));
        dp[0][0]=obstacleGrid[0][0]==0?1:0;
        for(int i=1;i<m;i++)
        {
            if(obstacleGrid[i][0]==1)
            {
                dp[i][0]=0;
            }
            else
                dp[i][0]=dp[i-1][0];
        }
        for(int j=1;j<n;j++)
        {
            if(obstacleGrid[0][j]==1)
            {
                dp[0][j]=0;
            }
            else
                dp[0][j]=dp[0][j-1];
        }
        for(int i=1;i<m;i++)
        {
            for(int j=1;j<n;j++)
            {
                if(obstacleGrid[i][j]==1)
                {
                    dp[i][j]=0;
                }
                else{
                    dp[i][j]=dp[i-1][j]+dp[i][j-1];
                }
            }
        }
        return dp[m-1][n-1];
    }
    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
        return slnA(obstacleGrid);
    }
};

343整数拆分

class Solution {
public:
    /*
    dp数组的含义
    dp[n]表示拆分n所能达到的最大值
    最大值显然在dp[i-j]*j,(i-j)*j之间
    */
    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/2;j++)
            {
                dp[i]=max(dp[i],max(dp[i-j]*j,(i-j)*j));
            }
        }
        return dp[n];
    }
};

96

class Solution {
public:
    /*
    dp数组含义,1到i为节点组成的二叉搜索树的个数为dp[i]
    初始化:dp[0]=0 dp[1]=1 dp[2]=2
    状态转移:dp[n]+=dp[i-j]*dp[j-1]
    */
    int numTrees(int n) {
        if(n==1)
        {
            return 1;
        }
        if(n==2)
        {
            return 2;
        }
        vector<int> dp(n+1);
        dp[0]=1;
        dp[1]=1;
        dp[2]=2;
        for(int i=3;i<=n;i++)
        {
            for(int j=1;j<=i;j++)
            {
                dp[i]+=dp[j-1]*dp[i-j];
            }
        }
        return dp[n];

    }
};
posted @ 2024-01-16 10:46  LiviaYu  阅读(6)  评论(0)    收藏  举报