zoukankan      html  css  js  c++  java
  • 免费馅饼 Why WA

    免费馅饼

    Time Limit: 1 Sec  Memory Limit: 64 MB
    Submit: 1576  Solved: 577

    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
    
    WA:
     1 #include<stdio.h>
     2 int maxT(int a,int b,int c)
     3 {
     4     if(a<b)
     5         a=b;
     6     if(a<c)
     7         a=c;
     8     return a;
     9 }
    10 int max(int a,int b)
    11 {
    12     return a>=b?a:b;
    13 }
    14 int main()
    15 {
    16     //freopen("a.txt","r",stdin);
    17     int n,coords[100020],hour[100020];
    18     int dp[15][100020];
    19     int maxn;
    20     int i,j,k;
    21     while(scanf("%d",&n)!=EOF,n)
    22     {
    23         for(i=1;i<=n;i++)
    24         {
    25             scanf("%d%d",&coords[i],&hour[i]);
    26             ++coords[i];
    27         }
    28         for(i=0;i<=12;i++)
    29             for(j=0;j<=hour[n];j++)
    30             {
    31                 dp[i][j]=0;
    32             }
    33 
    34         j=1;
    35         for(i=1;i<=hour[n];i++)
    36         {
    37             while(hour[j]==i)
    38             {
    39                 dp[coords[j]][i]++;
    40                 j++;
    41             }
    42         }
    43         for(i=1;i<=4;i++)
    44             dp[i][1]=0;
    45         for(i=8;i<=11;i++)
    46             dp[i][1]=0;
    47     /*    for(i=1;i<=11;i++)
    48         {
    49             printf("
    ");
    50             for(j=1;j<=hour[n];j++)
    51                 printf("%-4d",dp[i][j]);
    52         }
    53         printf("
    ");*/
    54         maxn=maxT(dp[5][1],dp[6][1],dp[7][1]);
    55         for(j=2;j<=hour[n];j++)
    56             for(i=1;i<=11;i++)
    57             {
    58                 if(!(dp[i-1][j-1]==0&&dp[i][j-1]==0&&dp[i+1][j-1]==0))
    59                 {
    60                     dp[i][j]+=maxT(dp[i-1][j-1],dp[i][j-1],dp[i+1][j-1]);
    61                     maxn=max(maxn,dp[i][j]);
    62                 }
    63                 else
    64                 {
    65                     dp[i][j]=0;
    66                 }
    67             }
    68      /*   for(i=1;i<=11;i++)
    69         {
    70             printf("
    ");
    71             for(j=1;j<=hour[n];j++)
    72                 printf("%-4d",dp[i][j]);
    73         }
    74         printf("
    ");*/
    75         printf("%d
    ",maxn);
    76     }
    77     return 0;
    78 }
    View Code
     1 #include<stdio.h>
     2 #include<string.h>
     3 #define  MAX 100005
     4 int dp[MAX][12],a[MAX],b[MAX];
     5 int max_1(int a,int b,int c,int d)
     6 {
     7     int max1,max2;
     8     max1=a+b>a+c?a+b:a+c;
     9     max2=max1>a+d?max1:a+d;
    10     return max2;
    11 }
    12 int max_2(int a,int b,int c)
    13 {
    14     return a+b>a+c?a+b:a+c;
    15 }
    16 int main()
    17 {
    18     //freopen("a.txt","r",stdin);
    19     int n;
    20     while(scanf("%d",&n),n)
    21     {
    22         int max=-999999;
    23         memset(dp,0,sizeof(dp));
    24         for(int i=1;i<=n;i++){
    25             scanf("%d %d",&a[i],&b[i]);
    26             dp[b[i]][a[i]]+=1;
    27             max=max>b[i]?max:b[i];
    28         }
    29     //    for(int i=max;i>=0;i--)
    30     //    {
    31     //        for(int j=5-i;j<=5+i;j++)
    32     //        printf("%d  ",dp[i][j]);printf("
    ");
    33     //    }
    34     //    printf("%d
    ",max);
    35         for(int i=max;i>=0;i--)
    36         {
    37             if(i<=4)
    38             {
    39                 for(int j=5-i;j<=5+i;j++)
    40                 {
    41                     dp[i][j]=max_1(dp[i][j],dp[i+1][j-1],dp[i+1][j],dp[i+1][j+1]);
    42     //                  printf("%d  ",dp[i][j]);
    43                 }
    44     //            printf("
    ");
    45             }
    46             else
    47             {
    48                 for(int j=0;j<=10;j++)
    49                 {
    50                     if(j==0)
    51                     {
    52                         dp[i][j]=max_2(dp[i][j],dp[i+1][j],dp[i+1][j+1]);
    53                     }
    54                     else if(j==10)
    55                     {
    56                         dp[i][j]=max_2(dp[i][j],dp[i+1][j-1],dp[i+1][j]);
    57                     }
    58                     else
    59                     {
    60                         dp[i][j]=max_1(dp[i][j],dp[i+1][j-1],dp[i+1][j],dp[i+1][j+1]);
    61                     }
    62                 }
    63             }
    64         }
    65         printf("%d
    ",dp[0][5]);
    66     //    printf("%d %d %d
    ",dp[1][4],dp[1][5],dp[1][6]);
    67     }
    68     return 0;
    69 }
    AC
     1 #include<stdio.h>
     2 #include<string.h>
     3 int dp[100005][15];
     4 int max(int a,int b)
     5 {
     6     return a>=b?a:b;
     7 }
     8 int main()
     9 {
    10     //freopen("a.txt","r",stdin);
    11     int n,i,j,maxt;
    12     int x,t;
    13     while(scanf("%d",&n),n)
    14     {
    15         maxt=0;
    16         memset(dp,0,sizeof(dp));
    17         for(i=0;i<n;i++)
    18         {
    19             scanf("%d%d",&x,&t);
    20             dp[t][x]++;
    21             if(maxt<t)  maxt=t;
    22         }
    23         for(i=maxt-1;i>=0;i--)
    24         {
    25             dp[i][0]+=max(dp[i+1][1],dp[i+1][0]);
    26             for(j=1;j<11;j++)
    27             {
    28                 dp[i][j]+=max(max(dp[i+1][j-1],dp[i+1][j]),dp[i+1][j+1]);
    29             }
    30         }
    31         printf("%d
    ",dp[0][5]);
    32     }
    33     return 0;
    34 }
    AC简约版
  • 相关阅读:
    pyftpdlib 搭建FTP服务器
    numpy 解一道简单数学题
    python 实现词云
    个人的毕业长足---- 暴走北京
    Tensorflow of GPU, hello fish by version 0.8.
    图像识别
    用一个Inception v3 架构模型实现简单的迁移学习(译:../tensorflow/tensorflow/examples/image_retraining/retrain.py)
    19.液晶屏的原理
    18.DMA-6410
    17.DMA-2440
  • 原文地址:https://www.cnblogs.com/get-an-AC-everyday/p/4186802.html
Copyright © 2011-2022 走看看