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 }
View Code

 

你可能感兴趣的:(poj)