#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)
这篇文章详细描述了一个使用C++编写的程序,通过动态规划算法解决二维矩阵中的最大路径和问题。程序逐行计算并更新每个位置的最大路径和。
摘要由CSDN通过智能技术生成