滑雪 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("\n");
84             for(j=1;j<=C;j++)
85                 printf("%-4d",dp[i][j]);
86         }*/
87         printf("%d\n",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\n",res);
76     }
77     return 0;
78 }
View Code

 

 

posted @ 2014-12-24 14:46  92度的苍蓝  阅读(214)  评论(0编辑  收藏  举报
http://images.cnblogs.com/cnblogs_com/Running-Time/724426/o_b74124f376fc157f352acc88.jpg