| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4552 人关注过本帖
标题:ACM 滑雪问题 wrong answer
取消只看楼主 加入收藏
tyf19938
Rank: 2
等 级:论坛游民
帖 子:47
专家分:24
注 册:2013-1-6
结帖率:100%
收藏
已结贴  问题点数:30 回复次数:7 
ACM 滑雪问题 wrong answer
题目
Description
Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长底滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子

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

一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。在上面的例子中,一条可滑行的滑坡为24-17-16-1。当然25-24-23-...-3-2-1更长。事实上,这是最长的一条。

Input
输入的第一行表示区域的行数R和列数C(1 <= R,C <= 100)。下面是R行,每行有C个整数,代表高度h,0<=h<=10000。输入0 0结束。

Output
输出最长区域的长度。

Sample Input
Original     Transformed
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
Original     Transformed
25
我的代码
程序代码:
#include<stdio.h>
int node[200][200],lenth[200][200]={0},r,c;
int len(int i,int j)
{
    int dir1=0,dir2=0,dir3=0,dir4=0,max=0;
    if(lenth[i][j]>0)
        return lenth[i][j];
    if(i>=1 && node[i-1][j]<node[i][j])
        dir1=1+len(i-1,j);
    if(i<=r-2 && node[i+1][j]<node[i][j])
        dir2=1+len(i+1,j);
    if(j>=1 && node[i][j-1]<node[i][j])
        dir3=1+len(i,j-1);
    if(j<=c-2 && node[i][j+1]<node[i][j])
        dir4=1+len(i,j+1);
    if(max<dir1)
        max=dir1;
    if(max<dir2)
        max=dir2;
    if(max<dir3)
        max=dir3;
    if(max<dir4)
        max=dir4;
    return max;
}


int main()
{
    int i,j,max=0;
    scanf("%d%d",&r,&c);
    for(i=0;i<r;i++)
        for(j=0;j<c;j++)
        scanf("%d",&node[i][j]);
    for(i=0;i<r;i++)
        for(j=0;j<c;j++)
    {
        lenth[i][j]=len(i,j);
        if(max<lenth[i][j])
            max=lenth[i][j];
    }
    printf("%d\n",max+1);
    return 0;
}

我测试没有问题
但 OJ 给的结果是wrong answer
求教哪儿有问题啊
搜索更多相关主题的帖子: 滑雪 Michael wrong 而且 
2013-04-15 09:54
tyf19938
Rank: 2
等 级:论坛游民
帖 子:47
专家分:24
注 册:2013-1-6
收藏
得分:0 
错误在什么地方啊?
2013-04-15 09:54
tyf19938
Rank: 2
等 级:论坛游民
帖 子:47
专家分:24
注 册:2013-1-6
收藏
得分:0 
2013-04-15 09:56
tyf19938
Rank: 2
等 级:论坛游民
帖 子:47
专家分:24
注 册:2013-1-6
收藏
得分:0 
回复 8楼 czz5242199
有点不懂啊
求详解
2013-04-15 13:32
tyf19938
Rank: 2
等 级:论坛游民
帖 子:47
专家分:24
注 册:2013-1-6
收藏
得分:0 
回复 7楼 beyondyf
程序代码:
#include<stdio.h>
int node[200][200],lenth[200][200],r,c;
int len(int i,int j)
{
    int dir1=0,dir2=0,dir3=0,dir4=0,max=0;
    if(lenth[i][j]>0)
        return lenth[i][j];
    if(i>=1 && node[i-1][j]<node[i][j])
        dir1=1+len(i-1,j);
    if(i<=r-2 && node[i+1][j]<node[i][j])
        dir2=1+len(i+1,j);
    if(j>=1 && node[i][j-1]<node[i][j])
        dir3=1+len(i,j-1);
    if(j<=c-2 && node[i][j+1]<node[i][j])
        dir4=1+len(i,j+1);
    if(max<dir1)
        max=dir1;
    if(max<dir2)
        max=dir2;
    if(max<dir3)
        max=dir3;
    if(max<dir4)
        max=dir4;
    return max;
}


int main()
{
    int i,j,max=0;
    while(scanf("%d%d",&r,&c),r||c)
    {
        max=0;
        for(i=0;i<r;i++)
            for(j=0;j<c;j++)
            {
               scanf("%d",&node[i][j]);
               lenth[i][j]=0;
            }

        for(i=0;i<r;i++)
            for(j=0;j<c;j++)
        {
            lenth[i][j]=len(i,j);
            if(max<lenth[i][j])
                max=lenth[i][j];
        }
        printf("%d\n",max+1);
    }
    return 0;
}

怎么还不可以呢

[ 本帖最后由 tyf19938 于 2013-4-15 16:29 编辑 ]
2013-04-15 13:35
tyf19938
Rank: 2
等 级:论坛游民
帖 子:47
专家分:24
注 册:2013-1-6
收藏
得分:0 
回复 7楼 beyondyf
你说的 第二个问题 测试没问题吧
2013-04-15 13:40
tyf19938
Rank: 2
等 级:论坛游民
帖 子:47
专家分:24
注 册:2013-1-6
收藏
得分:0 
回复 13楼 czz5242199
1 2
2 1
这个数据的 结果为 2  是么
对第一个数搜索时 即 len(0,0)
 if(j<=c-2 && node[i][j+1]<node[i][j])
        dir4=1+len(i,j+1);
会调用len (0,1)
再解释一下  谢谢啊
2013-04-15 16:26
tyf19938
Rank: 2
等 级:论坛游民
帖 子:47
专家分:24
注 册:2013-1-6
收藏
得分:0 
程序代码:
#include<stdio.h>
int node[200][200],lenth[200][200],r,c;
int len(int i,int j)
{
    int dir1=0,dir2=0,dir3=0,dir4=0,max=0;
    if(lenth[i][j]>0)
        return lenth[i][j];
    if(i>=1 && node[i-1][j]<node[i][j])
        dir1=1+len(i-1,j);
    if(i<=r-2 && node[i+1][j]<node[i][j])
        dir2=1+len(i+1,j);
    if(j>=1 && node[i][j-1]<node[i][j])
        dir3=1+len(i,j-1);
    if(j<=c-2 && node[i][j+1]<node[i][j])
        dir4=1+len(i,j+1);
    if(max<dir1)
        max=dir1;
    if(max<dir2)
        max=dir2;
    if(max<dir3)
        max=dir3;
    if(max<dir4)
        max=dir4;
    return max;
}

 

 
int main()
{
    int i,j,max=0;
    while(scanf("%d%d",&r,&c),r||c)
    {
        max=0;
        for(i=0;i<r;i++)
            for(j=0;j<c;j++)
            {
               scanf("%d",&node[i][j]);
               lenth[i][j]=0;
            }

 
        for(i=0;i<r;i++)
            for(j=0;j<c;j++)
        {
            lenth[i][j]=len(i,j);
            if(max<lenth[i][j])
                max=lenth[i][j];
        }
        printf("%d\n",max+1);
    }
    return 0;
}

ac
2013-04-15 22:06
快速回复:ACM 滑雪问题 wrong answer
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019137 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved