【洛谷P1434】滑雪

洛谷 滑雪 动态规划(记忆化搜索) 记忆化搜索 阅读详情

滑雪


题目链接:滑雪

题目描述

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个数,代表高度(两个数字之间用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

解题思路①

这道题可以用记忆化搜索的方法来做将每一个节点的值都求一遍,用数组标记,最后取出最大值,输出答案

程序如下:

#include<cstdio>
#include<iostream>
using namespace std;
int n,m,a[110][110],f[110][110],maxn;
const int fx[5]={0,-1,1,0,0};
const int fy[5]={0,0,0,1,-1};
int dfs(int x,int y)//搜索
{
	if(f[x][y])//记忆化
		return f[x][y];
	for(int i=1;i<=4;i++)
		if(a[x+fx[i]][y+fy[i]]<a[x][y]&&x+fx[i]<=n&&x+fx[i]>0&&y+fy[i]>0&&y+fy[i]<=m)//判断是否合法
			f[x][y]=max(dfs(x+fx[i],y+fy[i])+1,f[x][y]);
	return f[x][y]; 
}
int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			scanf("%d",&a[i][j]);
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
		{
			f[i][j]=dfs(i,j);
			if(f[i][j]>maxn)//取最大值
				maxn=f[i][j];
		}
	cout<<maxn+1<<endl;//因为本身也算一个节点
}

解题思路②

同样的,这道题也是一个动态规划,从高度较低的点向高度较高的点推,再找到最大的点,输出它的值。但是动态规划必须是有序的,所以在这里作者将这个二维的数组展开成一维的,进行排序后它就有序了。

程序如下:

#include<iostream>
#include<algorithm> 
#include<cstdio>
using namespace std;
int n,m,t[10010],maxn;
const int fx[5]={0,-1,1,0,0};
const int fy[5]={0,0,0,1,-1};
struct xy{
	int b;//值
	int x;//横坐标
	int y;//纵坐标
}f[10010];
bool bi(xy q,xy p)
{
	return q.b<p.b;
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
		{
			scanf("%d",&f[(i-1)*m+j].b);
			f[(i-1)*m+j].x=i;f[(i-1)*m+j].y=j;//预处理
		}
	sort(f+1,f+n*m+1,bi);//排序
	for(int i=1;i<=n*m;i++)//枚举全部
		for(int j=i-1;j>0;j--)//从高到低
			for(int k=1;k<=4;k++)//四个方向
				if(f[i].x==f[j].x+fx[k]&&f[i].y==f[j].y+fy[k]&&f[i].b>f[j].b)//判断是否合法
				{
					t[i]=max(t[j]+1,t[i]);//动态转移
					if(t[i]>maxn)//取最大值
						maxn=t[i];
				}
	cout<<maxn+1;//因为本身也算一个节点
}

这里其实有一个需要注意的点:同一高度是滑不过去的。

分享

作者刷红的一片天
作者刷红的一片天

洛谷 P1434 [SHOI2002]滑雪 题解 记忆化搜索,详见代码和一本通 #include <bits/stdc++.h> using namespace std; int dx[4]={0, 0, 1, -1}; int dy[4]={1, -1, 0, 0}; int r, c, a[110][110], dp[110][110], ans; int dfs(int x, int y) { if(dp[x][y]) { ... 阅读详情

相关推荐

CTF---Web---文件包含---01

文章目录前言一、题目描述二、解题步骤1.查看源代码2.文件包含(/etc/passwd)3.解码总结 前言 题目分类: CTF—Web—文件包含 一、题目描述 题目:提示寻找passwd文件 二、解题步骤 1.查看源代码 提示所有图片存储路径是download.php?name=img, 此时name参数的存在就提示此题可能为“文件包含”。 2.文件包含(/etc/passwd) 两种查看方式: 2.1、访问view-source:http://192.168.87.180/download.php

qq_22160557的博客 1391

洛谷:P1434 [SHOI2002] 滑雪 题解

洛谷:P1434 [SHOI2002] 滑雪 题解

qq_61935738的博客 859

汇川Easy 301 和MCGS进行Modbus RTU通讯(485)浮点数读取和写入

4DF0001对应寄存器D0,4DF0003对应寄存器D2。注意:要选com2口,com1口是232通讯。

qq_61916672的博客 2904

洛谷P1403滑雪AC代码

说点有趣的,就这个题的rec,如果开始的vector数组,那么就是90,第二个tle,这个时候得吸氧,不吸氧过不去,如果rec就用个数组的话,那就正常压着过,980多ms。还有就是,这个ios::sync_with_stdio(false) 这个甚至可以是增加时间而不是减少时间~~~提醒:博客纯粹写着自娱自乐,代码也不值得深推,记录生活罢了^_^

aiwangyi6的博客 186

【鸿蒙南向开发】OpenHarmony——分布式数据对象之功能实践

通过本文的学习可了解到分布式数据对象的主要接口、大致调用方法和功能实现等。结合对应内容,可以进一步对分布式数据对象同步机制做深度学习。下一步,(1) 着重理解同步组网的构建原理。(2) 着重理解同步组网内,监听change和status变化的实现。●如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:●关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。

HarmonyOS_666的博客 1091

单目和多目视觉统一标定

单目和多目视觉统一标定 一.单目视觉标定 在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数。在大多数条件下这些参数必须通过实验与计算才能得到,这个求解参数的过程就称之为相机标定(或摄像机标定)。无论是在图像测量或者机器视觉应用中,相机参数的标定都是非常关键的环节,其标定结果的精度及算法的稳定性直接影响相机工作产生结果的准确性。因此,做好相机标定是做好后续工作的前提,提高标定精度是科研工作的重点所在

吴建明wujianming_110117 2911

记忆化搜索——洛谷P1434滑雪

【代码】记忆化搜索——洛谷P1434滑雪。

m0_74236193的博客 364

Nordic开发者必备:SEGGER Embedded Studio免费许可证申请与配置全攻略

本文为Nordic芯片开发者提供了SEGGER Embedded Studio(SES)集成开发环境的详细配置指南。内容涵盖免费许可证的合规申请流程、项目创建、Nordic SDK集成,以及编辑器优化、构建调试配置、RTT日志输出等核心功能的高效设置,旨在帮助开发者构建深度优化的专业开发环境,显著提升嵌入式开发效率。

cheese的博客 353

蓝桥杯 c/c++ 算法提高 最长滑雪道

算法提高 最长滑雪道 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述   小袁非常喜欢滑雪, 因为滑雪很刺激。为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。 小袁想知道在某个区域中最长的一个滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。如下: 一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。在上面的...

OWCYKH的博客 899

YOLOv11 改进 - 下采样 | 轻量化突破:ADown 下采样让 YOLOv11 参量减、精度升

本文介绍了一种轻量级的特征下采样模块 ADown,它结合平均池化与最大池化策略,实现更有效的信息保留与压缩。在传统卷积网络中,特征下采样常造成信息损失,而 ADown 通过双通道并行结构优化了下采样效果,提升了模型的表达能力。在 YOLOv11 中引入 ADown 替换原有的下采样模块后,网络在保持高效性的同时,显著提升了目标检测的精度与稳定性。文章详细介绍了 ADown 的核心代码实现、模块注册流程以及 YOLOv11-ADown 模型的配置和训练方法,为轻量化目标检测模型的优化提供了实用参考。

魔改工程师的博客 1480

《Android系统开发中高级定制专栏导读》

欢迎来到【Android 中高级系统定制】专栏!在这里,将深入探讨Android系统开发与定制的方方面面,涵盖从权限管理、驱动开发到系统应用配置等多个领域。

我其实什么都不会 1579

【洛谷】【dp】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 一个人可以从某个点滑向上下左右相...

m0_52995942的博客 247

如何理解S参数的三大特性

提到S参数的时候经常会涉及一些概念,如无源性、因果性、互易性等,本文逐一介绍这些特性的概念、成因以及判断方式。

一只豌豆象的博客 4499

洛谷 P1434 滑雪 (记忆化 & 动规) 题解

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

Y的博客 418

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

洛谷P1434 [SHOI2002] 滑雪

洛谷,C++,菜菜奋斗日记

2402_88149600的博客 414

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

洛谷P1434 [SHOI2002]滑雪(记忆化搜索,DFS)

传送门 难度 https://www.luogu.com.cn/problem/P1434 普及/提高- 分析 这道题需要使用记忆化搜索,否则会超时 需要注意的是,并不一定从最高点开始的滑雪长度最长,所以会需要对每一个点尝试进行DFS 我一开始的时候尝试的是BFS,试了多次都只能达到90分的程度(测试点2会超时)。可能在记忆化搜索这里,BFS的效果不如DFS吧。本题中DFS快...

空空的池子 401

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

洛谷 p1434 滑雪

洛谷 p1434 滑雪 1.附上70分代码: #include #include int a[100+10][100+10]; int vis[100+10][100+10]; int r,c; int next[][2]={{-1,0},{1,0},{0,-1},{0,1}};//上 下 左 右 int max=0; void dfs(int step,int r1,int c1)

mrcrack的博客 538

洛谷P1434 [SHOI2002] 滑雪--Python

在上面的例子中,一条可行的滑坡为 $24-17-16-1$(从 $24$ 开始,在 $1$ 结束)。当然 $25$-$24$-$23$-$\ldots$-$3$-$2$-$1$ 更长。事实上,这是最长的一条。Michael 想知道在一个区域中最长的滑坡。输入的第一行为表示区域的二维数组的行数 $R$ 和列数 $C$。下面是 $R$ 行,每行有 $C$ 个数,代表高度(两个数字之间用 $1$ 个空格间隔)。对于 $100\%$ 的数据,$1\leq R,C\leq 100$。## 输入输出样例 #1。

2301_80183949的博客 597

洛谷P1434 [SHOI2002] 滑雪题解

今天来水洛谷题!

小冻梨的博客 473

P1434 滑雪【洛谷算法习题】

摘要: 题目P1434要求在一个二维高度矩阵中找出最长的严格递减路径(只能向上下左右移动)。使用记忆化DFS算法,定义s[x][y]表示从(x,y)出发的最长路径长度,通过递归遍历四个方向,利用缓存避免重复计算。每个点的状态转移方程为相邻更低点的最大值加1,最终遍历所有起点取全局最大值。时间复杂度O(R×C),适用于100×100的网格。代码用方向数组简化遍历,通过DFS函数实现记忆化搜索,高效求解最长滑坡长度。 核心点:记忆化DFS、严格递减路径、动态规划思想、方向数组遍历。

Pretty Boy Fox的博客 245

洛谷 P1434 [SHOI2002] 滑雪(记忆化搜索)

SHOI2002] 滑雪 - 洛谷。

小 P 的博客 325

洛谷[P1434 [SHOI2002]滑雪] {动态规划的引入}|{dfs} 奋斗的珂珂~

洛谷[P1434 [SHOI2002]滑雪] {动态规划的引入}|{dfs} 题目描述 Michael 喜欢滑雪。这并不奇怪,因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael 想知道在一个区域中最长的滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子: 1 2 3 4 5 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13

cmk_chy的博客 341

洛谷 P1434 滑雪

题目 滑雪???? 题解思路  解题很简单????,使用动态规划是就好了 ✔ 状态:dp[i][j]从i,j位置出发所能滑的最大长度。  状态转移方程:dp[i][j]=max(dp[i-1][j],dp[i][j-1],dp[i][j+1],dp[i+1][j])+1 ✔  简单的动态规划的题不会很难,而这种很明显就是增加了一些额外条件的动态规划。状态不变,状态转移方程也不变,只是计算状态转移方程是多了一个条件,因为只能往低的地方滑所以只有arr[i-1][j]<a[i][j]才能考虑转移向dp[i

少年的博客 363

洛谷—— P1434 滑雪

https://www.luogu.org/problem/show?pid=1434#sub 题目描述 Michael喜欢滑雪。这并不奇怪,因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道在一个区域中最长的滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子: 1 2 3...

agcozdwdfvds08078的博客 129

[洛谷]P1434 [SHOI2002] 滑雪

灵活且合理地使用stl~

陕西师范大学 人工智能 周一卓 的博客 661
上一篇: 俄罗斯方块
下一篇: 【SSL_P1455】电子老鼠闯迷宫
SSL_GYX
博客等级 码龄7年 103粉丝 297原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值