mirror of
https://github.com/Kiritow/OJ-Problems-Source.git
synced 2024-03-22 13:11:29 +08:00
ed2de2e423
1500-1599
48 lines
1.3 KiB
C++
48 lines
1.3 KiB
C++
#include <iostream>
|
|
#include <cstdio>
|
|
#include <cstring>
|
|
#include <algorithm>
|
|
using namespace std;
|
|
#define CLR(x) memset(x, 0, sizeof(x))
|
|
int n, m;
|
|
int d[505][505][2];
|
|
int x[505][505][2];
|
|
int nor[505][505], wes[505][505];
|
|
void init()
|
|
{
|
|
for (int t = 0; t < 2; ++ t)
|
|
for (int i = 0; i < n; ++ i)
|
|
for (int j = 0; j < m; ++ j)
|
|
scanf ("%d", &x[i][j][t]);
|
|
CLR (nor); CLR (wes);
|
|
for (int i = 0; i < n; ++ i)
|
|
for (int j = 0; j < m; ++ j){
|
|
wes[i][j] = (j ? x[i][j][0]+wes[i][j-1] : x[i][j][0]);
|
|
nor[i][j] = (i ? x[i][j][1]+nor[i-1][j] : x[i][j][1]);
|
|
}
|
|
}
|
|
int DP()
|
|
{
|
|
CLR (d);
|
|
d[0][0][0] = x[0][0][0]; d[0][0][1] = x[0][0][1];
|
|
for (int i = 0; i < n; ++ i)
|
|
for (int j = 0; j < m; ++ j){
|
|
if (!i && !j) continue;
|
|
d[i][j][0] = wes[i][j];
|
|
if (i)
|
|
d[i][j][0] += max(d[i-1][j][0], d[i-1][j][1]);
|
|
d[i][j][1] = nor[i][j];
|
|
if (j)
|
|
d[i][j][1] += max(d[i][j-1][0], d[i][j-1][1]);
|
|
}
|
|
return max(d[n-1][m-1][0], d[n-1][m-1][1]);
|
|
}
|
|
int main()
|
|
{
|
|
while (scanf ("%d%d", &n, &m) != EOF && n){
|
|
init();
|
|
printf ("%d\n", DP());
|
|
}
|
|
return 0;
|
|
}
|