Beans
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1945 Accepted Submission(s): 984
Problem Description
Bean-eating is an interesting game, everyone owns an M*N matrix, which is filled with different qualities beans. Meantime, there is only one bean in any 1*1 grid. Now you want to eat the beans and collect the qualities, but everyone must obey by the following rules: if you eat the bean at the coordinate(x, y), you can’t eat the beans anyway at the coordinates listed (if exiting): (x, y-1), (x, y+1), and the both rows whose abscissas are x-1 and x+1.
Now, how much qualities can you eat and then get
Input
There are a few cases. In each case, there are two integer M (row number) and N (column number). The next M lines each contain N integers, representing the qualities of the beans. We can make sure that the quality of bean isn't beyond 1000, and 1<=M*N<=200000.
Output
For each case, you just output the MAX qualities you can eat and then get.
Sample Input
4 6
11 0 7 5 13 9
78 4 81 6 22 4
1 40 9 34 16 10
11 22 0 33 39 6
Sample Output
242
Source
2009 Multi-University Training Contest 4 - Host by HDU
Recommend
gaojie
这题目是DP,DP自己独立做出来的次数不多,而这次是独立做出来的,哈哈哈,有点欣喜
其实这题分析后就会发现 可以先求整行的最大值用dp,知道每行的的最大值后在求整体的最大值用DP。其思路是一样的。 求行的最大值公式 0代表不选,1代表选
dp[j][0] = max(dp[j-1][1],dp[j-1][0]);
dp[j][1] = max(dp[j-2][0],dp[j-2][1]);
val=max(dp[j][0],dp[j][1]);
同样的方法处理整体。 注意处理边界啊
[cpp] /***************************************************************
> File Name: a.cpp
> Author: SDUT_GYX
> Mail: 2272902662@qq.com
> Created Time: 2013/5/23 23:48:46
**************************************************************/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include