滑雪题解-记忆化搜索,DP

Open3D点云数据处理(二):读写点云,你真的会吗? 本文详细介绍了open3d加载点云、保存点云的方法,同时打印点云坐标、颜色、法向量等字段信息。 阅读详情

原创链接

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。
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

Source SHTSC 2002

解题思路

搜索(DFS)

这题的数据不是很大,但还是不能直接用搜索的。
所以我们可以考虑优化,普通的优化有两种,记忆化 或 剪枝。
我们先考虑剪枝

剪枝

“可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长底滑坡”

显而易见,我们在这里可以用 高度 剪枝。只要出现以下情况,我们就可以停止递归:走到一个盆地(四周高中间低)

给出代码:

#include<cstdio>
using namespace std;
const int fx[9]={0,-1,0,1,0},fy[9]={0,0,-1,0,1};
int a[105][105];
int r,c,ans=-10000;
void dg(int x,int y,int sum)
{
	if(sum>ans) ans=sum;
	if(a[x][y]<a[x-1][y]&&a[x][y]<a[x][y-1]&&a[x][y]<a[x][y+1]&&a[x][y]<a[x+1][y])
		return ;//高度优化
	int xx,yy;
	for(int i=1;i<=4;++i)
	{
		xx=x+fx[i],yy=y+fy[i];
		if(a[xx][yy]<a[x][y])
			dg(xx,yy,sum+1);
	}
}
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]);
	for(int i=1;i<=r;++i)
		for(int j=1;j<=c;++j)
			dg(i,j,0);
	printf("%d",ans);
	return 0;
}`

但是,这还是会时间超限。
所以我们考虑第二种优化:记忆化

记忆化

先设 F i , j F_{i,j} Fi,j​ 为 i,j 为起始点的最大长度。
所以就可以剪枝,如果这个点有值我们就直接返回这个值。
如果没有,那就另外再更新。
所以得出代码:

#include<cstdio>
const int fx[9]={0,-1,0,1,0},fy[9]={0,0,-1,0,1};
int a[102][102],f[102][102];
int r,c;
int dg(int x,int y)
{
	if(f[x][y]) return f[x][y];
	int t=1,xx,yy;
	for(int i=1;i<=4;i++)
	{
		xx=x+fx[i],yy=y+fy[i];
		if(a[x][y]<a[xx][yy])
		{
			int tmp=dg(xx,yy)+1;
			if(tmp>t) t=tmp;
		}
	}
	f[x][y]=t;
	return t;
}
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]);
	int ans=0;
	for(int i=1;i<=r;++i)
		for(int j=1;j<=c;++j)
		{
			f[i][j]=dg(i,j);
			if(f[i][j]>ans) ans=f[i][j];
		}
	printf("%d",ans);
	return 0;
}

然后,过了。
你学废了吗?

讨论动态规划解法(DP)

其实你可以发现,这道题的正确解法已经有了DP的味道。
再从新审视一下……这不就是个DP嘛?设出状态,最后得出答案。
但是这道题与别的DP题不同的是,我们的所有状态因为有后效性所以只能在递归中实现。这与树型DP也有相似之处。

总结

这题我们用到了记忆化优化(也可以说是DP了),以后看到题目爆搜可能过不了,就可以考虑优化。但是要慎重选择。

【2026OD新机考】【不定滑窗】20260415-API请求日志去重分析【Py/Java/C++/C/JS/Go六种语言OD真题】【欧弟算法】全网注释最详细分类最全的华子OD真题题解 中找到所有的连续的相同元素,同时统计对应的连续相同元素对应的值的平均值。:当右指针为第一个元素(没有前一个元素),或者右指针对应的元素。某微服务系统的日志监控平台需分析API调用记录,日志含大量。相等,说明当前元素仍然属于同一个相同元素窗口,将当前元素值。中的所有元素均相等,并且计算窗口和情况即可。请实现一个函数,对给定的日志数据去重合并处理。位置,表示开启一个新的窗口,此时需要重置窗口和。,为了优化重复的请求记录,存储和后续分析需对。:对应的响应时间数组(毫秒)。重新置为当前右指针的元素值。 阅读详情

相关推荐

手推反向传播+numpy实现

反向传播的重要性不必多说,手推也是必备基础,大厂面试要求用numpy实现一下BP也是经常的事。下面以一个简单的两层网络为例(简单到连bias都没有的那种),真·手推反向传播+numpy实现。 说明: input:输入 net_h:隐层 S(x):sigmoid简写 SD(x):sigmoid导数的简写 out_h:隐层经过sigmoid激活的输出 net_o:输出层 out_o:经过经过sigmoid激活的输出层,也就是最后的输出 target(简写t1、t2):Ground...

xian0710830114的专栏 1238

滑雪—记忆化搜索+动态规划(POJ)

滑雪DescriptionSample Input解题思路搜索(DFS)剪枝记忆化讨论动态规划解法(DP)总结 Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长底滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8

Fly_with_dream的博客 339

开源项目 ruoyi-sso-oauth2(一)环境配置

Ruoyi若依实现单点登录SSO、oauth2认证

Xiaoweidumpb 9683

【算法每日一练]-记忆化dfs 篇4 滑雪 ,天下 ,第一 ,切木棍

今天讲一下记忆化的dfs先来道简单点的吧。

m0_69478376的博客 408

AI Agent实战:WorkBuddy安装部署、任务执行与模型接入全教程

AI Agent是当前自动化办公与智能工作流的核心技术,它区别于传统问答式AI,能够理解目标、拆解任务并调用工具交付完整成果。其底层原理基于任务规划、工具调用与结果验证的循环机制,让机器从“提供建议”进化为“完成任务”。在工程实践中,合理配置模型服务(如接入DeepSeek)、设计标准化Skill(技能包)与自定义指令,可以显著提升Agent在报告生成、数据分析、竞品调研等场景中的稳定性与效率。WorkBuddy作为典型的任务式AI工作台,为运营、产品、开发等多角色提供了统一入口,覆盖安装部署、任务描述公式

weixin_26712075的博客 289

知识图谱与人工智能本体论:构建机器认知的语义基石

本文探讨了知识图谱与人工智能本体论如何作为机器认知的语义基石,让AI从‘知道数据’迈向‘理解知识’。文章详细拆解了本体论的核心构件与构建方法,并阐述了从本体到知识图谱的实践路径,包括知识获取、融合、存储及推理应用,最终分析了其在智能搜索与专家系统等场景中带来的根本性重塑。

nginx7reverse的博客 910

[记忆化搜索] 滑雪(模板题+记忆化搜索)

文章目录0. 前言1. 记忆化搜索模板题 0. 前言 动态规划问题可以使用记忆化搜索 + 递归来求解。也是 dfs 优化的方式,两者本无区别。 1. 记忆化搜索模板题 901. 滑雪 重点: 记忆化搜索、递归实现 dp 思路: 状态定义: f[i][j]:所有从 (i, j) 开始滑的路径的最大值 状态转移: 分类依据:滑的方向就是上下左右四个方向,当下一个位置的高度低于当前高度的是个更新状态即可 显然,计算 f[i][j] 时,需要提前计算得到前一个转移过来的状态,然后再这样一直往前找,是

Y-puyu 的博客 1031

Buildroot RK3568系统中更改GPU驱动为:panfrost

1:Kernel中开启Panfrost 2:更新mesa 到mesa-24.0.2 3:查看/proc/interrupts 中的panfrost 中断 4:LInux启动日志 5:查看GPU负载

OpenWrt/WLAN/驱动/Android/嵌入式开发总结 2078

POJ1088:滑雪(记忆化)

Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长底滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子  1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 2

ACM!荣耀之路! 2296

64、5G 侧链通信技术详解

本文详细解析了5G侧链通信的关键技术,包括资源感知与选择、UE间协调、混合ARQ、功率控制、信道探测与CSI报告以及侧链同步。资源感知与选择通过周期性或随机方式实现资源分配,UE间协调通过主动或被动方式避免资源冲突。混合ARQ机制确保数据传输可靠性,功率控制和信道探测优化传输质量并减少干扰。侧链同步则通过多种方式确保设备间时间一致性。这些技术相互配合,构建了高效稳定的5G侧链通信体系,适用于智能交通、物联网、应急通信等多个领域,为未来无线通信发展提供强大支撑。

oil88的博客 101

倾斜摄影数据转换为3DTile格式的方法:基于CesiumLab GIS

通过使用CesiumLab GIS,倾斜摄影数据可以方便地转换为3DTile格式,并在CesiumJS等3D地理信息可视化工具中进行展示和分析。一旦成功导入3DTile数据,就可以在CesiumLab GIS中利用其强大的可视化和分析功能进行进一步的处理。转换完成后,可以将生成的3DTile数据导入到CesiumLab GIS中进行可视化和分析。启动CesiumLab GIS应用程序,并按照界面上的指导导入转换后的3DTile数据。脚本将开始执行,并将倾斜摄影数据转换为3DTile格式。

ObDjango的博客 1076

记忆化搜索之滑雪问题

题目链接; http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=10 题目大意:就是给你一个矩阵,每一次只能往四个方向移动,并且下一步到达的方块上的数值都必须必上一次的小,问你怎样走才能走的步数最多。 具体思路:就是使用dfs,我觉得记忆化搜索和搜索的不同就是,记忆化搜索已经走过的值直接返回就可以了,不需要再进行计算。 代码: #inc...

Let_life_stop的博客 552

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

POJ1088 滑雪题解+HDU 1078(记忆化搜索DP)

Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长底滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8...

日拱一卒,功不唐捐 2740

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

AcWing 901 滑雪 题解 (动态规划—DP—记忆化搜索)

#include<iostream> #include<algorithm> #include<cstring> using namespace std; const int N = 310; int h[N][N];//储存每个格子的高度 int f[N][N];//储存每条路径的长度 int n, m; int dx[4] = {1, -1, 0, 0}, dy[4] = {0, 0, 1, -1}; int dp(int x, int y){ int

qiaodxs的博客 105

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

AcWing 记忆化搜索——901. 滑雪

记忆化搜索的实质:通过存储已经遍历过的状态信息,从而避免对同一状态重复遍历的 搜索算法。

a131529的博客 469

带有技巧的搜索(洛谷,数独二进制优先找枚举顺序,旅行商(写了状压DP),数字三角(利用杨辉三角的系数),滑雪(记忆化))

P1118 [USACO06FEB]数字三角形`Backward Digit Su`… P1434 [SHOI2002]滑雪 P1433 吃奶酪 P1074 靶形数独

越看越喜欢啊 756

【 DP | 记忆化搜索 】【Uva10258 | poj 1088】 滑雪

题目链接:poj1088 题意: 这个题目就是滑雪呗,就是给定n行m列,从高到低进行滑雪,然后问最长路是多少 题解: 浪子回头金不换 这个题目是以DAG为背景的,所有应该有两个解法: 以前总觉得DP快一点,但是这个题目实测是记忆化搜索比较快。 记忆化搜索: 首先存值,然后进行看哪一个可以延伸下去,一直延伸下去知道没有的话就返回值,用到就是基本的记忆化搜索的基本套路。 贴上代...

Z_sea的博客 329

深度剖析记忆化搜索(非dp)

此文章意在从代码层面剖析记忆化搜索的核心关键,分析递归,回溯和返回之间的关系。适合记忆化入门者阅读,更适合搜索新手学习以强化对搜索的理解和认知

m0_64595440的博客 2295

Michael喜欢滑雪百这并不奇怪(记忆化搜索)

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-1

star_yongheng的博客 4163

动态规划-滑雪(记忆化搜索)

动态规划-滑雪题目题解1.暴力搜索(dfs)2.记忆化搜索代码1.暴力搜索(dfs)2.记忆化搜索 题目 题解 1.暴力搜索(dfs) 可以通过枚举每个点,将每个点作为dfs的起始点,去搜索一条最长的路径,限制条件就是严格单调下降。注意:对于此题做dfs搜索的时候,是不用标记访问的点数的,因为,限制条件是严格单调下降,每一个点只能被访问一次,不会出现环路的状态 ,并且需要遍历所有的路径,找到最大的长度。 2.记忆化搜索 在暴力搜索中,需要枚举每一个点,且以每一个点作为起点进行搜索,仔细想一想递归的过程就知

weixin_44775484的博客 460

AcWing.901.滑雪(记忆化搜索)

现在给定你一个二维矩阵表示滑雪场各区域的高度,请你找出在该滑雪场中能够完成的最长滑雪轨迹,并输出其长度(可经过最大区域数)。当然去到每一个方向都必须满足那个方向的高度更小,且不越界,并且在使用记忆化搜索时,题目中必须满足是个拓扑图,不能存在环。开始滑的最大值再加上第一步),如此求出每一个方向的最大值之后,再从四个最大值里找最大值。一个人从滑雪场中的某个区域内出发,每次可以向上下左右任意一个方向滑动一个单位距离。当然,一个人能够滑动到某相邻区域的前提是该区域的高度低于自己目前所在区域的高度。

2302_79440616的博客 744

记忆化搜索DP_901. 滑雪

题目: 滑雪 题目 提交记录 讨论 题解 视频讲解 给定一个R行C列的矩阵,表示一个矩形网格滑雪场。 矩阵中第 i 行第 j 列的点表示滑雪场的第 i 行第 j 列区域的高度。 一个人从滑雪场中的某个区域内出发,每次可以向上下左右任意一个方向滑动一个单位距离。 当然,一个人能够滑动到某相邻区域的前提是该区域的高度低于自己目前所在区域的高度。 下面给出一个矩阵作为例子: 1 2 3 4 5...

phacpf123 430

【记忆化搜索】滑雪

本文讲解记忆化搜索问题:滑雪

qq_73176808的博客 168

记忆化搜索简介

很多人应该都被动态规划折磨过(+1)。其实我觉得动态规划是搜索的一种优化写法,搜索就是把所有可能的结果都找出来,选择最合理的一个作为答案输出,动态规划可以把搜索得到的中间结果存储起来。而记忆化搜索,其实本质上就是动态规划,在得出一个结果后,存储起来,等到下一次搜索时,如果发现已经存储了这个状态的答案,则直接返回。记忆化搜索可以做常数优化。

Lucky_Pupil的博客 443

P2573 [SCOI2012]滑雪 【暴搜 + 记忆化搜索 + DP】

暂时没有空提供讲解思路

m0_63613132的博客 154

【题解】滑雪 luogu1434 记忆化搜索

记忆化搜索入门题 题目 Michael喜欢滑雪。这并不奇怪,因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道在一个区域中最长的滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子: 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7...

C@bMv7GRVt)Q 130
上一篇: 2020CSP第二轮总结
下一篇: 【2020.11.14NOIP普及组模拟】到达 题解
A_F_O
博客等级 码龄7年 52粉丝 1453原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值