AcWing 1018. 最低通行费
原题链接
简单
作者:
minux
,
2020-04-14 18:58:08
,
所有人可见
,
阅读 463
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int main(){
int R;
scanf("%d", &R);
// 读入矩阵信息
int matrix[R][R];
for(int i=0; i<R; ++i){
for(int j=0; j<R; ++j){
scanf("%d", &matrix[i][j]);
}
}
// 坐标型dp
// 状态: 定义f[i][j]表示走到格子[i,j]花费的最低费用
// 转移方程: f[i][j] = min(f[i-1][j], f[i][j-1])+matrix[i][j]
// 边界条件: i==0和j==0
// 计算顺序: f[0][0]->f[R-1][R-1]
int f[R][R];
memset(f, 0x00, sizeof f);
for(int i=0; i<R; ++i){
for(int j=0; j<R; ++j){
if(i==0 && j==0) f[i][j]=matrix[i][j];
else if(i==0 && j>0) f[i][j] = f[i][j-1]+matrix[i][j];
else if(j==0 && i>0) f[i][j] = f[i-1][j]+matrix[i][j];
else f[i][j]=min(f[i-1][j], f[i][j-1])+matrix[i][j];
}
}
printf("%d\n", f[R-1][R-1]);
return 0;
}