描述
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 ?

Now, how much qualities can you eat and then get ?
-
输入
-
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<=500.
输出
- For each case, you just output the MAX qualities you can eat and then get. 样例输入
-
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
样例输出
-
242
解题思路:对于每一行,即求最大不连续子序列和求得每一行的最大不连续子序列和后,根据题目要求,对于矩阵的每一行都不连续,同样是一个最大不连续子序列和的问题。
AC代码如下:
#include <stdio.h>
int a[500], b[500];
int maxSubSeq(int a[], int size)
{
if(size == 1)
return a[0];
if(size == 2)
return a[0] > a[1] ? a[0] : a[1];
int dpi, dpi_1, dpi_2;
dpi_2 = a[0];
dpi_1 = a[0] > a[1] ? a[0] : a[1];
for(int i=2; i<size; i++)
{
int t = dpi_2 + a[i];
dpi = t > dpi_1 ? t : dpi_1;
dpi_2 = dpi_1;
dpi_1 = dpi;
}
return dpi;
}
int main()
{
int m, n;
while(scanf("%d %d", &m, &n) == 2)
{
for(int i=0; i<m; i++)
{
for(int j=0; j<n; j++)
{
scanf("%d", &a[j]);
}
b[i] = maxSubSeq(a, n);
}
printf("%d\n", maxSubSeq(b, m));
}
return 0;
}