动态规划四步走
-
列出状态
-
写出状态转移方程
-
初始化状态
-
进行状态转移
列出状态
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]中就是我们要的结果