zoukankan      html  css  js  c++  java
  • 滑雪 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
  • 相关阅读:
    hdu2717 Catch That Cow
    hdu1017
    Html5 学习笔记 【PC固定布局】 实战2 导航栏搜索区域
    Html5 学习笔记 【PC固定布局】 实战1 导航栏
    Html5 学习笔记 Sublime text3 和 Emmet 插件
    Html5 学习笔记 --》布局
    Html5 学习笔记 --》css3 学习
    Html5 学习笔记 --》html基础 css 基础
    数据库备份
    spring boot 尚桂谷学习笔记11 数据访问03 JPA
  • 原文地址:https://www.cnblogs.com/get-an-AC-everyday/p/4182430.html
Copyright © 2011-2022 走看看