• 滑雪 why WA


     滑雪

    Time Limit: 1 Sec  Memory Limit: 64 MB
    Submit: 587  Solved: 219

    Description

    小明喜欢滑雪,因为滑雪的确很刺激,可是为了获得速度,滑的区域必须向下倾斜,当小明滑到坡底,不得不再次走上坡或等着直升机来载他,小明想知道在一个区域中最长的滑坡。滑坡的长度由滑过点的个数来计算,区域由一个二位数组给出。数组的每个数字代表点的高度。下面是一个例子:
    1  2  3  4  5
    16 17 18 19 6
    15 24 25 20 7
    14 23 22 21 8
    13 12 11 10 9
    
    一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减少,在上面的例子中,一条可行的滑坡为25 24 17 16 1(从25开始到1结束),当然25 24 23 22... 2 1更长,事实上是最长的一条。

    Input

    多个测试数据。每组测试数据第一行为表示区域的数组的行数R和列数C( 1 <= R ,C <= 100) 下面是R行,每行有C个数代表高度(不超过10000)。

    Output

    输出区域中最长的滑坡长度。

    Sample Input

    5 5
    1 2 3 4 5
    16 17 18 19 6
    15 24 25 20 7
    14 23 22 21 8
    13 12 11 10 9

    Sample Output

    25

    WA:
     1 #include<stdio.h>
     2 #define INF -1
     3 int R,C;
     4 int Ski_area[200][200];
     5 int dp[200][200];
     6 int maxn;
     7 
     8 int max(int a,int b)
     9 {
    10     return a>b?a:b;
    11 }
    12 
    13 void ski_high(int x,int y,int *length)
    14 {
    15     int j,k,m[4];
    16     m[0]=Ski_area[x-1][y],m[1]=Ski_area[x][y-1],m[2]=Ski_area[x+1][y],m[3]=Ski_area[x][y+1];
    17 
    18     k=-1;
    19         for(j=0;j<4;j++)
    20         {
    21             if(Ski_area[x][y]<m[j])
    22             {
    23                 if(k==-1)
    24                 {
    25                     k=j;
    26                 }
    27                 else
    28                 {
    29                     if(m[k]>m[j])
    30                         k=j;
    31                 }
    32             }
    33 
    34         }
    35         if(k==-1)
    36             return;
    37         ++(*length);
    38         if(k==0)
    39             ski_high(x-1,y,length);
    40         else if(k==1)
    41             ski_high(x,y-1,length);
    42         else if(k==2)
    43             ski_high(x+1,y,length);
    44         else
    45             ski_high(x,y+1,length);
    46 }
    47 
    48 int main()
    49 {
    50     freopen("a.txt","r",stdin);
    51     int i,j,k;
    52     while(scanf("%d%d",&R,&C)==2)
    53     {
    54         for(i=1;i<=R;i++)
    55             for(j=1;j<=C;j++)
    56             {
    57                 scanf("%d",&Ski_area[i][j]);
    58             }
    59 
    60         for(i=0;i<=R;i++)
    61         {
    62             Ski_area[i][0]=INF;
    63         }
    64 
    65         for(i=0;i<=C;i++)
    66         {
    67             Ski_area[0][i]=INF;
    68         }
    69 
    70 
    71         maxn=1;
    72         for(i=1;i<=R;i++)
    73             for(j=1;j<=C;j++)
    74             {
    75                 k=1;
    76                 ski_high(i,j,&k);
    77                 dp[i][j]=k;
    78 
    79                 maxn=max(maxn,dp[i][j]);
    80             }
    81     /*    for(i=1;i<=R;i++)
    82         {
    83             printf("
    ");
    84             for(j=1;j<=C;j++)
    85                 printf("%-4d",dp[i][j]);
    86         }*/
    87         printf("%d
    ",maxn);
    88     }
    89     return 0;
    90 }
    View Code

     AC版:

     1 #include<stdio.h>
     2 
     3 int dp[100][100];
     4 int arr[100][100];
     5 int R,C;
     6 
     7 int getHigh(int i,int j)
     8 {
     9     if(dp[i][j]>1)
    10     {
    11         return dp[i][j];
    12     }
    13     int max=1;
    14     if(arr[i][j]>arr[i][j-1]&&j-1>=0)
    15     {
    16         int h=getHigh(i,j-1)+1;
    17         if(h>max)
    18         {
    19             max=h;
    20         }
    21     }
    22     if(arr[i][j]>arr[i][j+1]&&j+1<C)
    23     {
    24         int h=getHigh(i,j+1)+1;
    25         if(h>max)
    26         {
    27             max=h;
    28         }
    29     }
    30     if(arr[i][j]>arr[i-1][j]&&i-1>=0)
    31     {
    32         int h=getHigh(i-1,j)+1;
    33         if(h>max)
    34         {
    35             max=h;
    36         }
    37     }
    38     if(arr[i][j]>arr[i+1][j]&&i+1<R)
    39     {
    40         int h=getHigh(i+1,j)+1;
    41         if(h>max)
    42         {
    43             max=h;
    44         }
    45     }
    46     return max;
    47 }
    48 
    49 int main()
    50 {
    51     //freopen("a.txt","r",stdin);
    52     int i,j;
    53     while(scanf("%d%d",&R,&C)!=EOF)
    54     {
    55         for(i=0;i<R;i++)
    56         {
    57             for(j=0;j<C;j++)
    58             {
    59                 scanf("%d",&arr[i][j]);
    60                 dp[i][j]=1;
    61             }
    62         }
    63         int res=0;
    64         for(i=0;i<R;i++)
    65         {
    66             for(j=0;j<C;j++)
    67             {
    68                 dp[i][j]=getHigh(i,j);
    69                 if(dp[i][j]>res)
    70                 {
    71                     res=dp[i][j];
    72                 }
    73             }
    74         }
    75         printf("%d
    ",res);
    76     }
    77     return 0;
    78 }
    View Code
  • 相关阅读:
    Pytest 参数化
    JmeterPerfMon Metrics Collector服务器性能监控插件的安装使用
    布同:基于JQuery的五子棋人机对战游戏设计与制作
    笔记:javascript学习
    布同:vim插件开发实例和讲解
    汤姆大叔文章列表
    布同:web版比赛实时算分系统的设计
    布同:pdf自定义分割(断章)
    布同:我的web后台开发技术层次图和经验感受
    技嘉主板B250M拆显卡
  • 原文地址:https://www.cnblogs.com/get-an-AC-everyday/p/4182430.html
Copyright © 2020-2023  润新知