#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
using namespace std;
const int maxn = 1005;
int map[maxn][maxn], dp[maxn][maxn], ldp[maxn][maxn], rdp[maxn][maxn];
int main() {
int n, m;
scanf("%d%d", &n, &m);
for(int i = 1;i <= n;i++){
for(int j = 1;j <= m;j++){
scanf("%d", &map[i][j]);
}
}
for(int i = 1;i <= m;i++)
dp[0][i] = ldp[0][i] = rdp[0][i];
for(int i = 1;i <= n;i++){
for(int j = 1;j <= m;j++){
ldp[i][j] = rdp[i][j] = dp[i-1][j] + map[i][j];
}
//left to right
for(int j = 2;j <= m;j++){
ldp[i][j] = min(ldp[i][j], ldp[i][j-1] + map[i][j]);
}
//right to left
for(int j = m - 1;j >= 1;j--){
rdp[i][j] = min(rdp[i][j], rdp[i][j+1] + map[i][j]);
}
for(int j = 1;j <= m;j++){
dp[i][j] = min(ldp[i][j], rdp[i][j]);
}
}
int ans = dp[n][m];
for(int j = m - 1;j >= 1;j--) ans = min(ans, dp[n][j]);
printf("%d\n", ans);
return 0;
}
S2
最新推荐文章于 2024-07-08 19:35:47 发布