int uniquePaths(int m, int n){
    int i,j;
    int dp[m][n];
    memset(dp,0,sizeof(dp));
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            if(i==0&&j>0)//边界条件
            {
                dp[i][j]=dp[i][j-1];
            }
            else if(i>0&&j==0)//边界条件
            {
                dp[i][j]=dp[i-1][j];
            }
            else if(i==0&&j==0)
            {
                dp[i][j]=1;     //边界条件
            }
            else{
                dp[i][j]=dp[i-1][j]+dp[i][j-1];   //状态方程
            }
        }
    }
    return dp[m-1][n-1];
}

这一题算是自己第一次看懂点了动态规划的方法,写一些自己的见解,如有错误还请指正。

 动态规划问题:

1、确定状态转移方程

首先需要确定状态方程由题可知,用一个二维数组dp[i][j]表示走到(i,j)点的路径个数。由体可知,其结果是dp[i-1][j]和dp[i][j-1]的和。即:dp[i][j]=dp[i-1][j]+dp[i][j-1];

2、确定边界条件

从题中可知,dp[0][0]=1,即从第一个点出发到第一个点有1条路径。对于第一行的元素,由于路径行走只能向右或向下,因此dp[0][j]=dp[0][j-1]=1.同样的对于第一列的元素。dp[i][0]=dp[i-1][0]=1。

大佬的思路。