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
",dp[n][m]);
50     }
51     return 0;
52 }
View Code
原文地址:https://www.cnblogs.com/fanminghui/p/3801328.html