当前位置: 首页 > ds >正文

P1434 [SHOI2002] 滑雪

P1434 [SHOI2002] 滑雪 - 洛谷

题目描述

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。下面是R行,每行有C个数,代表高度(两个数字之间用1个空格间隔)。

输出格式

输出区域中最长滑坡的长度。

输入输出样例

输入#1输出#1
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

说明/提示

对于100%的数据,1≤R,C≤100。

思路:

dfs(tx, ty) + 1 的含义

当从点 (x, y) 可以滑向点 (tx, ty) 时(即满足高度递减条件,也就是 a[x][y] > a[tx][ty],其中 a 数组存储各点的高度),从点 (x, y) 出发经过点 (tx, ty) 继续滑行的路径长度就是 dfs(tx, ty) + 1。这里的 + 1 代表从点 (x, y) 滑到点 (tx, ty) 这一步。

代码:

#include <bits/stdc++.h>
using namespace std;
int R, C, a[105][105], mem[105][105];
int dx[] = {-1, 1, 0, 0};
int dy[] = {0, 0, -1, 1};
// 正确的记忆化搜索:计算以 (i,j) 为起点的最长滑坡长度
int dfs(int x, int y) 
{if(mem[x][y] != -1)return mem[x][y];mem[x][y] = 1;for(int k = 0 ; k < 4 ; k++){int tx = x + dx[k];int ty = y + dy[k];if(tx >= 1 && tx <= R && ty >= 1 && ty <= C && a[x][y] > a[tx][ty]){mem[x][y] = max(mem[x][y],dfs(tx,ty) + 1);	} }return mem[x][y];
}int main() 
{cin >> R >> C;for (int i = 1; i <= R; i++){for(int j = 1 ; j <= C ; j++){cin >> a[i][j];}}memset(mem,-1,sizeof(mem));int ans = -1;for (int i = 1; i <= R; i++){for(int j = 1 ; j <= C ; j++){ans = max(ans,dfs(i,j));}}cout << ans;return 0;
}

http://www.xdnf.cn/news/3861.html

相关文章:

  • NVMe控制器之完成信息解析模块
  • Rotary Positional Embedding
  • FastAPI系列14:API限流与暴力破解防护
  • 学习黑客资产威胁分析贴
  • Linux:时间同步服务器
  • 深入理解C++中的指针与引用:区别、应用与最佳实践
  • 《Spring Boot实战指南:从零开始构建现代Java应用》
  • 从实列中学习linux shell11 :在 shell 中 对于json的解析 jq 和awk 如何选择,尤其在数据清洗,数据重新组织中的应用
  • 叠层阻抗线框
  • 【信息系统项目管理师-论文真题】2011下半年论文详解(包括解题思路和写作要点)
  • 1penl配置
  • 【Go类库分享】mcp-go Go搭建MCP服务
  • HTTPcookie与session实现
  • 洛谷 P1850 [NOIP 2016 提高组] 换教室
  • 【家政平台开发(100)】终结篇,破局·拓新:家政平台未来发展的战略蓝图
  • 安卓基础(startActivityForResult和onActivityResult)
  • 【Mytais系列】Update语句执行流程
  • 二、shell脚本--变量与数据类型
  • Python datetime库的用法 Python从入门到入土系列第3篇-洞察标准库DateTime
  • 【Spring】Spring中8种常见依赖注入使用示例
  • 健康养生新主张
  • web应用开发说明文档
  • matlab学习之旅
  • 数据结构---
  • 实战项目:基于控制台与数据库的图书管理系统开发指南
  • C语言中memmove和memcpy
  • 智慧校园整体解决方案-5PPT(65页)
  • python中的异常处理
  • 【CF】Day50——Codeforces Round 960 (Div. 2) BCD
  • 数学实验Matlab