目录
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];
}
};
标签:obstacleGrid,return,int,vector,动态,规划,public,dp
From: https://www.cnblogs.com/liviayu/p/17967051