码迷,mamicode.com
首页 > 其他好文 > 详细

【题解】滑雪

时间:2019-03-29 23:33:59      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:程序   gif   none   cli   输出   get   node   names   速度   

题目描述

        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(从24开始,在1结束)。当然25—24—23—......—3—2—1更长。事实上,这是最长的一条。

 

输入输出格式

输入格式

         第一行为表示区域的二维数组的行数R和列数C(1≤R,C≤100)。下面是R行,每行有C个数,代表高度。

 

输出格式

         一行,区域中最长滑坡的长度。

 

输入输出样例

输入样例

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

 

输出样例

25

 

题解

        简单的记搜,记录一个点向四面滑的最大距离即可。

技术图片
#include <cstdio>
#include <algorithm>

using namespace std;

int r,c;
int dx[4]={-1,1,0,0},dy[4]={0,0,-1,1};
struct node {int val,t[4];} a[102][102];

int dfs(int x,int y)
{
    int maxn=1;
    for(int i=0;i<4;i++)
    {
        if(!a[x][y].t[i])
        {     
            a[x][y].t[i]=1;
            if(x+dx[i]>=1&&x+dx[i]<=r&&y+dy[i]>=1&&y+dy[i]<=c)
            {
                if(a[x][y].val>a[x+dx[i]][y+dy[i]].val) 
                {
                    a[x][y].t[i]+=dfs(x+dx[i],y+dy[i]);
                }
            }
        }
        maxn=max(maxn,a[x][y].t[i]);
    }
    return maxn;
}

int main()
{
    scanf("%d%d",&r,&c);
    for(int i=1;i<=r;i++) 
    {
        for(int j=1;j<=c;j++) 
        {
            scanf("%d",&a[i][j].val);    
        }    
    }
    
    int maxn=1;
    for(int i=1;i<=r;i++)
    {
        for(int j=1;j<=c;j++)
        {
            maxn=max(maxn,dfs(i,j));
        }
    }
    printf("%d",maxn);
    
    return 0;
}
参考程序

 

【题解】滑雪

标签:程序   gif   none   cli   输出   get   node   names   速度   

原文地址:https://www.cnblogs.com/kcn999/p/10624758.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!