dp
可以发现,对于(i,j),要么把它运上去,那么把它运到左边,枚举一下即可
#include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> #define MAXN 505 using namespace std; int f[MAXN][MAXN]; int a[MAXN][MAXN],b[MAXN][MAXN]; int s[MAXN][MAXN],t[MAXN][MAXN]; int n,m; void solve(){ for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ scanf("%d",&a[i][j]); s[i][j]=s[i][j-1]+a[i][j]; } } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ scanf("%d",&b[i][j]); t[i][j]=t[i-1][j]+b[i][j]; } } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ f[i][j]=max(f[i-1][j]+s[i][j],f[i][j-1]+t[i][j]); } } printf("%d\n",f[n][m]); } int main() { while(1){ scanf("%d%d",&n,&m); if(!n) break; solve(); } return 0; }
时间: 2024-10-14 23:59:05