zoukankan      html  css  js  c++  java
  • HDOJ1176 免费馅饼[DP入门]

    免费馅饼

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 13555    Accepted Submission(s): 4485


    Problem Description
    都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼。说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在他身旁的10米范围内。馅饼如果掉在了地上当然就不能吃了,所以gameboy马上卸下身上的背包去接。但由于小径两侧都不能站人,所以他只能在小径上接。由于gameboy平时老呆在房间里玩游戏,虽然在游戏中是个身手敏捷的高手,但在现实中运动神经特别迟钝,每秒种只有在移动不超过一米的范围内接住坠落的馅饼。现在给这条小径如图标上坐标:

    为了使问题简化,假设在接下来的一段时间里,馅饼都掉落在0-10这11个位置。开始时gameboy站在5这个位置,因此在第一秒,他只能接到4,5,6这三个位置中其中一个位置上的馅饼。问gameboy最多可能接到多少个馅饼?(假设他的背包可以容纳无穷多个馅饼)
     
    Input
    输入数据有多组。每组数据的第一行为以正整数n(0<n<100000),表示有n个馅饼掉在这条小径上。在结下来的n行中,每行有两个整数x,T(0<T<100000),表示在第T秒有一个馅饼掉在x点上。同一秒钟在同一点上可能掉下多个馅饼。n=0时输入结束。
     
    Output
    每一组输入数据对应一行输出。输出一个整数m,表示gameboy最多可能接到m个馅饼。
    提示:本题的输入数据量比较大,建议用scanf读入,用cin可能会超时。

     
    Sample Input
    6 5 1 4 1 6 1 7 2 7 2 8 3 0
     
    Sample Output
    4
     
    Author
    lwg
     
     
     
    变相的数塔
    code:
     1 /*
     2 6
     3 5 1
     4 4 1
     5 6 1
     6 7 2
     7 7 2
     8 8 3
     9 18 
    10 4 1
    11 5 1
    12 6 1
    13 3 2
    14 4 2
    15 4 2
    16 4 2
    17 5 2
    18 5 2
    19 7 2
    20 7 2
    21 3 3
    22 4 3
    23 5 3 
    24 2 2
    25 2 2
    26 2 2
    27 2 2 
    28 */ 
    29 #include<iostream>
    30 using namespace std;
    31 
    32 int map[100002][11];
    33 
    34 int main()
    35 {
    36     int n;
    37     int i,j;
    38     int max;
    39     int tag;
    40     int x,t;
    41     while(~scanf("%d",&n),n)
    42     {
    43         max=-1;
    44         memset(map,0,sizeof(map));
    45         while(n--)
    46         {
    47             scanf("%d%d",&x,&t);
    48             map[t][x]++;
    49             if(t>max)
    50                 max=t;
    51         }
    52         for(i=max-1;i>=1;i--)
    53         {
    54             if(map[i+1][0]>=map[i+1][1])
    55                 map[i][0]+=map[i+1][0];
    56             else
    57                 map[i][0]+=map[i+1][1];
    58             if(map[i+1][10]>=map[i+1][9])
    59                 map[i][10]+=map[i+1][10];
    60             else
    61                 map[i][10]+=map[i+1][9];  
    62             for(j=1;j<10;j++)
    63             {
    64                 if(map[i+1][j-1]>=map[i+1][j]&&map[i+1][j-1]>=map[i+1][j+1])
    65                     map[i][j]+=map[i+1][j-1];
    66                 else if(map[i+1][j]>=map[i+1][j-1]&&map[i+1][j]>=map[i+1][j+1])
    67                     map[i][j]+=map[i+1][j];
    68                 else
    69                     map[i][j]+=map[i+1][j+1];
    70             }
    71         }
    72         max=-1;
    73         for(i=4;i<7;i++)
    74         {
    75             if(map[1][i]>max)
    76             {
    77                 max=map[1][i];
    78             }    
    79         }
    80         printf("%d\n",max);    
    81     }
    82     return 0;
    83 } 






                If you have any questions about this article, welcome to leave a message on the message board.



    Brad(Bowen) Xu
    E-Mail : maxxbw1992@gmail.com


  • 相关阅读:
    【转】编写高质量代码改善C#程序的157个建议——建议27:在查询中使用Lambda表达式
    python的reduce()函数
    SpringBoot中的配置文件
    23种设计模式概况性应用场景
    设计模式---合成模式
    tmpfs(转)
    Nginx配置文件(nginx.conf)配置详解
    Java设计模式------策略模式
    ubuntu下操作端口的方法
    ubuntu下安装ssh服务器方法
  • 原文地址:https://www.cnblogs.com/XBWer/p/2594810.html
Copyright © 2011-2022 走看看