您的位置:首页 > 汽车 > 新车 > 动态规划-矩阵的最小路径和(只允许向右向下移动)

动态规划-矩阵的最小路径和(只允许向右向下移动)

2024/10/31 9:51:12 来源:https://blog.csdn.net/hehe_soft_engineer/article/details/139394181  浏览:    关键词:动态规划-矩阵的最小路径和(只允许向右向下移动)

一、问题描述

二、解题思路

这个题目是典型的动态规划问题,只能从左上角开始,往右或者往下移动。

1.dp数组的初始化:

        第一行:设置行总花费变量,每往右走一个格把当前格的花费Cost加到总花费中,总花费就是当前格的最小花费。

        第一列:设置列总花费变量,每往下走一个格把当前格的花费Cost加到总花费中,总花费就是当前格的最小花费。

2.状态转移方程:

        设当前在第[i][j]位置,从左上角到当前位置的总花费=下面两者较小值加上当前格花费cost 

        2.1 从左侧格[i][j-1]往右走

        2.2 从上侧格[i-1][j]往下走

        即:dp[i][j] = Min(dp[i][j-1],dp[i-1][j])+cost 

三、代码实现

import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param matrix int整型二维数组 the matrix* @return int整型*/public int minPathSum (int[][] matrix) {// 这个题目是典型的动态规划问题int rowLen=matrix.length;int colLen=matrix[0].length;int[][] dpMatrix=new int[rowLen][colLen];//初始化dpMatrixint colCost=0;for(int col=0;col<colLen;col++){//初始化第0行colCost+=matrix[0][col];dpMatrix[0][col]=colCost;}int rowCost=0;for(int row=0;row<rowLen;row++){//初始化第0列rowCost+=matrix[row][0];dpMatrix[row][0]=rowCost;}//每次只能向右或者向下移动for(int row=1;row<rowLen;row++){for(int col=1;col<colLen;col++){int downCost=dpMatrix[row-1][col]+matrix[row][col];int rightCost=dpMatrix[row][col-1]+matrix[row][col];dpMatrix[row][col]=Math.min(downCost,rightCost);}}return dpMatrix[rowLen-1][colLen-1];}
}

四、刷题链接

矩阵的最小路径和_牛客题霸_牛客网

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com