zoukankan      html  css  js  c++  java
  • HDU 2845 Beans

    Beans

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 1433    Accepted Submission(s): 741


    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
     
    Recommend
    gaojie
    //看到这题真的不知道怎么做、唉
    //再知道用动态规划做后,动态方程写错了,WA了好多次呀
    //求最大不连续子序列之和,先求横的、求n横、然后再竖着求一次、、、

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    using namespace std;
    int dp[2003][2003];
    int rc[2003];
    int main()
    {
        int n,m;
        int i,j;
        int Max;
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            for(i=1;i<=n;i++)
              for(j=1;j<=m;j++)
                    scanf("%d",&dp[i][j]);

            for(i=1;i<=n;i++)
            {   rc[0]=-100000000;
                rc[1]=Max=dp[i][1];
                for(j=2;j<=m;j++)
                 {
                    rc[j]=max(max(rc[j-2]+dp[i][j],dp[i][j]),rc[j-2]);
                    rc[j]=max(rc[j],rc[j-1]);//开始写的时候少了这个
                    Max=Max>rc[j]?Max:rc[j];
                 }
              dp[i][0]=Max;
            }
            rc[0]=-100000000;
            rc[1]=Max=dp[1][0];//方程写对后,rc[1]忘记赋值,又一次WA
            for(i=2;i<=n;i++)
            {
              rc[i]=max(max(rc[i-2]+dp[i][0],dp[i][0]),rc[i-2]);
               rc[i]=max(rc[i],rc[i-1]);
              Max=Max>rc[i]?Max:rc[i];
            }
            printf("%d\n",Max);
        }
        return 0;
    }

  • 相关阅读:
    经典测试工程师面试题(一)
    python面试题2
    python面试题1
    软件测试面试题2
    软件测试面试题1
    python读写csv文件
    死亡还是合并?和李开复聊聊走投无路创业公司(转)
    项目如何开始:怎样和客户谈需求(转)
    [转载]给IT人员支招:如何跟业务部门谈需求分析?
    VS2013的一些常用快捷键
  • 原文地址:https://www.cnblogs.com/372465774y/p/2601669.html
Copyright © 2011-2022 走看看