求矩阵的最大和路径问题
题目描述:有一个m×n的矩阵,现要从左上角走到右下角,并且方向只能是向下或者向右,
现规定一条路径的权值为走此路径所经过的值的和。给定一个矩阵,请找出最大和。
Example:矩阵D为输入矩阵
矩阵P为走到每一格的最大和
我们可以看到填满P矩阵,我们就可以找到最大值了,状态转移方程为:
P[i, j] = D[i, j] + max(P[i -1, j], P[i, j-1])
代码:
int max_path(int m, int n, int **p){
P[0,0] = D[0][0];
for(int i = 1; i < m; i++){
P[i][0] = D[i][0] +P[i-1][0];
}
for(int i = 1; i < n; i++){
p[0][i] = D[0][i] + P[0][i-1];
}
for(int i = 1; i < m-1; i++){
for(int j =1; j < n-1; j++){
P[i][j] = D[i][j] + max(P[i-1][j], p[i][j-1]);
}
return P[m-1][n-1];
}