动态规划算法求解矩阵最小路径和问题,动态规划 矩阵最短路径
BM68矩阵的最小路径和
知识点数组的动态编程
描述一个给定的n * m矩阵A,从左上角开始,一次只能向右或向下,最后到达右下角。路径上的所有数字加起来就是路径和,输出所有路径中最小的路径和。
数据范围:满足矩阵中的任何值。
需求:时间复杂性
例如,当输入[[1,3,5,9],[8,1,3,4],[5,0,6,1],[8,8,4,0]]时,对应的返回值为12,选择的最小求和路径如下图所示:
示例1输入:
[[1,3,5,9],[8,1,3,4],[5,0,6,1],[8,8,4,0]]复制返回值:
12份
2示例输入:
[[1,2,3],[1,2,3]]复制返回值:
7问题解决方案
状态转换方程:
dp[i,j]=min(dp[i - 1][j],dp[i][j - 1])矩阵[i][j]
代码如下:
#包含位/标准数据。h
使用命名空间std
int minPathSum(向量向量int矩阵)
{
if (matrix.size()==0 matrix[0]。size()==0)
{
返回0;
}
int m=matrix . size();
int n=matrix[0]。size();
std:vector std:vector int dp(m,std:vector int (n,0))。
for(int I=0;我是m;我)
{
for(int k=0;I n;k)
{
如果(k==0)
{
如果(i==0)
{
dp[i][k]=矩阵[I][k];
}
其他
{
dp[i][k]=dp[i - 1][k]矩阵[I][k];
}
}
else if (i==0)
{
dp[i][k]=dp[i][k - 1]矩阵[I][k];
}
其他
{
DP[I][k]=matrix[I][k]STD:min(DP[I-1][k],DP[I][k-1]);
}
}
}
返回DP[m-1][n-1];
}
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。