zoukankan      html  css  js  c++  java
  • Beans

    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.
    SampleInput
    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
    SampleOutput
    242

    题意:在图中取数,例如取了81之后,同一行的相邻两个不能取,还有81的上面那行和下面那行也不能取,问能取到的最大和是多少?

    解析:对于一行来说,相邻的数不可同时取,

    容易得到状态转移方程:sum[i] = max (sum[i-2]+sum[i], sum[i-1])(i>=2,注意i从1开始,i-2=0时不存在sum[i-2]相当于只取sum[i]),初始时sum[0] = 0, sum[i]就是第i个数

    而对于一列来说,显然的也是相邻的不能取,所以对每一行处理完后再用每行得到结果组成一列进行同样处理即可得出答案

     1 #include <iostream>
     2 using namespace std;
     3 #define M 200005
     4 
     5 int a[M], b[M];
     6 
     7 int main()
     8 {
     9     int m, n, i, j;
    10     while (~scanf ("%d%d", &m, &n))
    11     {
    12         for (i = 1; i <= m; i++)
    13         {
    14             for (j = 1; j <= n; j++)
    15                 scanf ("%d", b+j);
    16             for (j = 2; j <= n; j++)
    17                 b[j] = max (b[j-2]+b[j], b[j-1]);
    18             a[i] = b[n];
    19         }
    20         for (i = 2; i <= m; i++)
    21             a[i] = max (a[i]+a[i-2], a[i-1]);
    22         printf ("%d
    ", a[m]);
    23     }
    24     return 0;
    25 }
    View Code
  • 相关阅读:
    SD卡测试
    测试人员可能会遇到的问题
    HDU 1024 Max Sum Plus Plus
    HDU 1176 免费馅饼
    HDU 1257 最少拦截系统
    HDU 1087 Super Jumping! Jumping! Jumping!
    poj 1328 Radar Installation
    poj 1753 Flip Game
    HDU 1003 Max Sum
    HDU 5592 ZYB's Premutation(BestCoder Round #65 C)
  • 原文地址:https://www.cnblogs.com/to-creat/p/4891159.html
Copyright © 2011-2022 走看看