[YZOJ]P1124--滑雪

该博客介绍了一道名为'滑雪'的编程题,要求在二维数组表示的滑雪区域中找到最长的下降路径。博主提供了问题描述、输入输出格式、样例及解题思路,包括利用深度优先搜索并优化避免超时的方法。最后,博主提到了完整的代码实现。
摘要由CSDN通过智能技术生成

题目原题(YZOJ)
题目原题(洛谷)

题目描述
这道题的背景也不写了,你把滑雪的那个神犇脑补成CJK就行了。
滑雪是一项非常刺激的运动,为了获得速度,滑雪的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。给出一个由二维数组表示的滑雪区域,数组的数字代表各点的高度。请你找出这个区域中最长的滑坡。下面是一个例子: 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更长。事实上,这是最长的一条滑坡。
输入格式
输入第一行为两个数R, C,表示滑雪区域的行数和列数。下面是R行,每行有C个整数,表示高度H(0≤H≤10000)。
输出格式
输出一个整数,表示滑雪区域中最长滑坡的长度。
样例输入
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
数据规模与约定
1<=R,C<=200.

一,题目大意
这道题意思是找一段最长的下降的四连通块,起始点和终点不定
二,思路分析
我们看到这道题的时候,很快会联想到搜索的走迷宫。我们可以枚举每一个点,即枚举每一个起点,然后用大法师枚举每一种可能。这个过程大概就是四个方位搜索,判断出界和是否下一个是否为下降就可以了(不需要用use数组判断之前走过没,因为你必须下降,不可能来回走)。
思路出来了,但是我们看到这个数据范围,会超时对吧。所以我们开始考虑优化。
因为上下左右四个方位缺一不可,所以无法剪枝,但是我们发现,可以记录答案,因为两个坡度之间是分步计算,不存在相互牵连。我们可以用一个数组来记录当走到map[i][j]时候能获得的最大长度,每次更新。当下次走到这个点的时候,直接调用答案就可以了
三,完整代码

#include<iostream>
#include<cstring>
#include<cstdio>
#define MAX 200
using namespace std;
int dx[5]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值