#include <bits/stdc++.h>
using namespace std;
int n,m;
int a[1005][1005];
long long s[1005][1005],x[1005][1005],f[1005][1005];
int main(){
// freopen("number.in","r",stdin);
// freopen("number.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
scanf("%d",&a[i][j]);
}
}
for(int i=1;i<=n;i++){
f[i][1]=f[i-1][1]+a[i][1];
}
for(int j=2;j<m;j++){
x[1][j]=f[1][j-1]+a[1][j];
s[n][j]=f[n][j-1]+a[n][j];
for(int i=2;i<=n;i++){
x[i][j]=max(f[i][j-1],x[i-1][j])+a[i][j];
}
for(int i=n-1;i>=1;i--){
s[i][j]=max(f[i][j-1],s[i+1][j])+a[i][j];
}
for(int i=1;i<=n;i++){
f[i][j]=max(x[i][j],s[i][j]);
}
}
if(m>1){
f[1][m]=f[1][m-1]+a[1][m];
for(int i=2;i<=n;i++){
f[i][m]=max(f[i][m-1],f[i-1][m])+a[i][m];
}
}
printf("%lld\n",f[n][m]);
fclose(stdin);
fclose(stdout);
return 0;
}
方格取数(number)
最新推荐文章于 2024-08-01 12:10:06 发布