poj 2948 Martian Mining
http://poj.org/problem?id=2948
题目大意:一个n*m的矩阵,每个格子内有两种矿yeyenum和bloggium,并且知道它们在每个格子内的数量是多少。最北边有bloggium的收集站,最西边有 yeyenum 的收集站。现在要在这些格子上面安装向北或者向西的传送带(每个格子自能装一种)。问最多能采到多少矿。
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #define maxn 600 5 using namespace std; 6 7 int n,m; 8 int dp[maxn][maxn]; 9 int a[maxn][maxn]; 10 int b[maxn][maxn]; 11 12 int main() 13 { 14 while(scanf("%d%d",&n,&m)!=EOF) 15 { 16 if(n==0&&m==0) break; 17 memset(a,0,sizeof(a)); 18 memset(b,0,sizeof(b)); 19 memset(dp,0,sizeof(dp)); 20 for(int i=1; i<=n; i++) 21 { 22 for(int j=1; j<=m; j++) 23 { 24 scanf("%d",&a[i][j]); 25 } 26 } 27 for(int i=1; i<=n; i++) 28 { 29 for(int j=1; j<=m; j++) 30 { 31 scanf("%d",&b[i][j]); 32 } 33 } 34 for(int i=1; i<=n; i++) 35 { 36 for(int j=1; j<=m; j++) 37 { 38 a[i][j]+=a[i][j-1]; 39 b[i][j]+=b[i-1][j]; 40 } 41 } 42 for(int i=1; i<=n; i++) 43 { 44 for(int j=1; j<=m; j++) 45 { 46 dp[i][j]=max(dp[i-1][j]+a[i][j],dp[i][j-1]+b[i][j]); 47 } 48 } 49 printf("%d\n",dp[n][m]); 50 } 51 return 0; 52 }