POJ 2948
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
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;
}