思路:
动态规划: 定义
p
i
,
j
p_{i,j}
pi,j为从第1列任意位置到达第i行第j列的最小路径和.
p
i
,
j
p_{i,j}
pi,j最多可以由三个状态转移到达:
p
i
,
j
−
1
p_{i,j-1}
pi,j−1、
p
i
−
1
,
j
p_{i-1,j}
pi−1,j、
p
i
+
1
,
j
p_{i+1,j}
pi+1,j. 最终答案即为
m
i
n
{
p
k
,
80
∣
1
≤
k
≤
80
}
min\{ p_{k,80} | 1\le k \le 80\}
min{pk,80∣1≤k≤80}.
int fun() {
freopen("..//input.txt", "r", stdin);//预先将matrix.txt中逗号替换成空格
int g[81][81];
int p[81][81];
for (int i = 1; i <= 80; i++)
for (int j = 1; j <= 80; j++)
cin >> g[i][j];
for (int r = 1; r <= 80; r++)
p[r][1] = g[r][1];
for (int c = 2; c <= 80; c++) {
for (int r = 1; r <= 80; r++)
p[r][c] = r != 1 ? g[r][c] + min(p[r][c - 1], p[r - 1][c]) : g[r][c] + p[r][c - 1];
for (int r = 80; r >= 1; r--)
p[r][c] = r != 80 ? min(p[r][c], p[r + 1][c] + g[r][c]) : p[r][c];
}
int mn = INT32_MAX;
for (int i = 1; i <= 80; i++)
mn = min(mn, p[i][80]);
return mn;
}