HDU 2845 Beans (动规)

Beans

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 2596    Accepted Submission(s): 1279

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   |   We have carefully selected several similar problems for you:  2830 2577 2870 1159 1176

这道题意思可以转换成:

对每一行,不能有间隔的取一个子序列,即取该行的最大不连续子序列和;

再从上面所有值中,取其最大不连续子序列和;就相当于隔一行取了
状态:f[i]表示取第i个元素(a[i]必取)的最大值,map[i]表示取到a[i](可不取)时的最大值

状态转移:f[i]=map[i-2]+a[i];map[i]=max{map[i-1],f[i]};

#include <stdio.h>
#include <iostream>
using namespace std;
#define M 200001
int vis[M],map[M],dp[M],f[M];
int max(int a[],int n)                //求在a[]中最大不连续子序列和。
{
  int i;
  f[0]=map[0]=0;
  f[1]=map[1]=a[1];
  for(i=2;i<=n;i++)                   //要保证i-2不会数组越界。
  {
      f[i]=map[i-2]+a[i];                  //因为要隔一个取,所以取了a[i],就不能取a[i-1],所以最大值就是前i-2个数的最大值+a[i].
      map[i]=f[i]>map[i-1]?f[i]:map[i-1];  //如果取a[i]要更大,更新map[i]的值。
  }
 return map[n];
}
int main(int i,int j,int k)
{
    int n,m,tot,cur;
    while(scanf("%d%d",&n,&m)!=EOF&&n&&m)
    {
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=m;j++)
                scanf("%d",&vis[j]);
            dp[i]=max(vis,m);
        }
    printf("%d\n",max(dp,n));
    }
    return 0;
}

HDU 2845 Beans (动规)

时间: 2024-08-15 22:38:37

HDU 2845 Beans (动规)的相关文章

HDU 2844 Coins (动规)

Coins Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 6904    Accepted Submission(s): 2809 Problem Description Whuacmers use coins.They have coins of value A1,A2,A3...An Silverland dollar. One

HDU 2845 Beans(DP,最大不连续和)

题意    吃豆子游戏    当你吃了一个格子的豆子   该格子左右两个和上下两行就不能吃了    输入每个格子的豆子数    求你最多能吃多少颗豆子 可以先求出每行你最多可以吃多少颗豆子   然后每行就压缩成只有一个格子了   里面的豆子数就是那一行最多可以吃的豆子数   然后问题就变成求一列最多可以吃多少颗豆子了   和处理每一行一样处理   那么问题就简化成求一行数字的最大不连续和问题了 令d[i]表示某一行前i个豆子的最大和  有两种情况  吃第i个格子中的豆子和不吃第i个格子中的豆子

HDU 1260 Tickets (动规)

Tickets Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 924    Accepted Submission(s): 468 Problem Description Jesus, what a great movie! Thousands of people are rushing to the cinema. However,

HDU 2845 Beans (DP)

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 everyo

HDU 2571 命运 (动规)

命运 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9334    Accepted Submission(s): 3289 Problem Description 穿过幽谷意味着离大魔王lemon已经无限接近了! 可谁能想到,yifenfei在斩杀了一些虾兵蟹将后,却再次面临命运大迷宫的考验,这是魔王lemon设下的又一个机关.要知

HDU 2845 Beans (最大不连续子序列和)

Beans Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2637    Accepted Submission(s): 1302 Problem Description Bean-eating is an interesting game, everyone owns an M*N matrix, which is filled wi

HDU 2845 Beans (DP)

Beans Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 2845 Description Bean-eating is an interesting game, everyone owns an M*N matrix, which is filled with different qualities beans. Meantime,

!HDU 1176--DP--(矩阵动规)

题意:有一个数轴,从0到10,小明开始在5这个位置.现在天上开始掉馅饼,小明每次只能移动单位一的长度,求小明最多能接到多少馅饼. 分析:刚开始接触动态规划,还没有真正理解动规的思维,所以刚开始的dp做法不知道对不对但是TLE了.正确的方法是建立一个以时间为行位置为列的矩阵,最初map[i][j]代表的是第i时刻j位置掉的馅饼的数量,状态转移方程:map[i][j]=map[i][j]+max(map[i+1][j-1],map[i+1][j],map[i+1][j+1]).也就是从最底层开始往上

HDU 2845 Beans (两次线性dp)

Beans Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3521    Accepted Submission(s): 1681 Problem Description Bean-eating is an interesting game, everyone owns an M*N matrix, which is filled w