确定状态
dp[i][j]表示在第i-1行第j-1列最大的path sum值
状态转移方程
dp[i][j] = dp[i][j] (i=0 and j =0)
dp[i][j]+dp[i][j-1] (i=0 and j!=0)
dp[i][j]+dp[i-1][j] (i!=0 and j=0)
dp[i][j]+ min{dp[i-1][j],dp[i][j-1]} (i!=0 and j!=0)
初始条件和边界条件
i=0:m
j=0:n
dp[i][j]=grid[i][j]
计算顺序
dp[0][0] .. ....dp[0][n-1]
....
dp[m-1][0] .....dp[0][n-1]
返回dp[m-1][n-1]
代码
class Solution {
public int minPathSum(int[][] grid) {
int m = grid.length;
int n= grid[0].length;
int [][]dp = new int[m][n];
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
dp[i][j]=grid[i][j];
}
}
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(i==0&&j==0){
dp[i][j]=dp[i][j];
}else 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{
dp[i][j]+=Math.min(dp[i-1][j],dp[i][j-1]);
}
}
}
return dp[m-1][n-1];
}
}
DP算法求最小路径和
本文详细介绍了一种使用动态规划(DP)算法解决寻找网格中从左上角到右下角最小路径和的问题。通过定义状态dp[i][j]表示在第i-1行第j-1列的最大路径和,并给出状态转移方程,阐述了如何递推计算每个位置的最小路径和,最终返回dp[m-1][n-1]作为整个网格的最小路径和。

2679

被折叠的 条评论
为什么被折叠?



