提交时间:2022-10-02 17:56:43
运行 ID: 65045
#include<bits/stdc++.h> using namespace std; int n,m; int a[1002][1002]; int dp1[1002],dp2[1002];//从上往下走,从上往上走 int dp[1002]; int main() { scanf("%d%d",&n,&m); int i,j; for(i=1; i<=n; i++) for(j=1; j<=m; j++) scanf("%d",&a[i][j]); dp[1]=a[1][1]; for(i=2; i<=n; i++) dp[i]=dp[i-1]+a[i][1]; for(i=2; i<=m; i++) { dp1[1]=dp[1]+a[1][i]; for(j=2; j<=n; j++) dp1[j]=max(dp[j],dp1[j-1])+a[j][i]; dp2[n]=dp[n]+a[n][i]; for(j=n-1; j>=1; j--) dp2[j]=max(dp[j],dp2[j+1])+a[j][i]; for(j=1; j<=n; j++) dp[j]=max(dp1[j],dp2[j]); /*for(j=1; j<=n; j++) cout<<dp1[j]<<endl; cout<<endl; for(j=1; j<=n; j++) cout<<dp2[j]<<endl; cout<<endl; for(j=1; j<=n; j++) cout<<dp[j]<<endl; cout<<endl;*/ } printf("%d",dp[n]); return 0; }