[[http://poj.org/problem?id=2948|POJ 2948]] #include #include #include #include #include using namespace std; int n,m,dp[505][505],prea[505][505],preb[505][505]; int main() { while(~scanf("%d%d",&n,&m)) { if(!n&&!m)return 0; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { scanf("%d",&prea[i][j]); prea[i][j]+=prea[i][j-1]+prea[i-1][j]-prea[i-1][j-1]; } for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { scanf("%d",&preb[i][j]); preb[i][j]+=preb[i][j-1]+preb[i-1][j]-preb[i-1][j-1]; } for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { dp[i][j]=max(dp[i-1][j]+prea[i][j]-prea[i-1][j],dp[i][j-1]+preb[i][j]-preb[i][j-1]); } printf("%d\n",dp[n][m]); } return 0; }