动态规划四步走

  1. 列出状态

  2. 写出状态转移方程

  3. 初始化状态

  4. 进行状态转移

列出状态

dp[i][j] 其中i,j分别是到达对应矩阵位置,dp[i][j]表示到达这个位置最小的路径和

状态转移方程

题目中要求只能向右边,或者向下,所以要想到达i,j对应的位置,只能从dp[i-1][j],和dp[i][j-1]这两个位置过来
即,想要到达位置的上边过来,或者左边过来。只要选出两种路线中最小的一个走过来即可,最后加上到到i,j位置的值即可
所以状态转移方程可以写成:dp[i][j] = min(dp[i-1][j] ,dp[i][j-1])+array[i][j];
同时注意到,要到array[0][j]只能向右,要到array[i][0]只能向下走。
所以把上面状态转移方程min函数的部分改成对应位置的值即可:    

初始化状态

从(0,0)位置到(0,0)当然是array[0][0] ,对应的dp[0][0] = array[0][0]。

进行状态转移

	int i = 0 ;
    int j = 0 ; 
    for(;i < row ; i++) {
        for(j=0;j<col;j++) {
            if(i==0&&j==0) {
                dp[i][j] = array[i][j];
            } else if(i==0) {
                dp[i][j] =array[i][j]+dp[i][j-1] ;
            } else if(j==0) {
                dp[i][j] =array[i][j]+dp[i-1][j] ;
            } else {
                dp[i][j] = min(dp[i-1][j],dp[i][j-1])+array[i][j];
            }  
            
        }
    }
    return dp[i-1][j-1];

最后dp[i-1][j-1]中就是我们要的结果