用dp,代码如下: #include<bits/stdc++.h> using namespace std; int n,m; long long a[1005][1005],f[1005][1005],f1[1005][1005],f2[1005][1005],f3[1005][1005]; int main(){ //freopen("number.in","r",stdin); //freopen("number.out","w",stdout); cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>a[i][j]; for(int i=0;i<=n+1;i++) for(int j=0;j<=m+1;j++) f[i][j]=f1[i][j]=f2[i][j]=f3[i][j]=-1e18; for(int i=1;i<=n;i++){ long long sum=0; for(int k=1;k<=i;k++)sum+=a[k][1]; f[i][1]=sum; } for(int j=2;j<=m;j++){ for(int i=1;i<=n;i++) f1[i][j]=f[i][j-1]+a[i][j]; for(int i=2;i<=n;i++) f2[i][j]=max(f2[i-1][j],f1[i-1][j])+a[i][j]; for(int i=n-1;i>=1;i--) f3[i][j]=max(f1[i+1][j],f3[i+1][j])+a[i][j]; for(int i=1;i<=n;i++){ f[i][j]=max(f1[i][j],f2[i][j]); f[i][j]=max(f[i][j],f3[i][j]); } } printf("%lld",f[n][m]); //fclose(stdin); //fclose(stdout); return 0; }
点赞 评论

相关推荐

牛客网
牛客企业服务