【洛谷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]) { ... 阅读详情

相关推荐

基于Dify Agent构建智能客服:攻克知识库查询、多轮对话、安全鉴权与人机协同

基于Dify Agent构建智能客服,并将知识库等核心能力工具化,再通过Chatflow进行流程编排,是一种强大且灵活的策略。它不仅解决了当前AI客服面临的诸多核心挑战,也为未来的功能扩展和智能化升级打下了坚实的基础。希望本文能为您在构建高效、智能的AI客服系统之路上提供有益的参考!dify实验室基于LLMOps平台-Dify的一站式学习平台。包含不限于:Dify工作流案例、DSL文件分享、模型接入、Dify交流讨论等各类资源分享。关注我,获取Dify相关资源(DSL、token、交流群等)。

同名公众号:dify实验室 3742

洛谷:P1434 [SHOI2002] 滑雪 题解

洛谷:P1434 [SHOI2002] 滑雪 题解

qq_61935738的博客 859

SolidWorks有限元分析流程

对于很多专业,在进行设计完成后,为了缩短开发周期,往往需要配合仿真结果进行,机械行业更是如此。平时大家多采用专业有限元仿真软件进行仿真分析,如ANSYS;不过SolidWorks软件因为制图简单,同时存在专用的有限元仿真模块Simulation,对于初学者往往更加适用,下面简单介绍下SolidWorks Simulation仿真流程。 1. 分析流程 关键步骤如下: **(1)创建算例;**对模型的每次分析都是一个算例,一个模型可以包含多个算例。 **(2)应用材料;**指定模型的材料属性,如铝合金、钢材等

DYH_BK的博客 3万+

洛谷P1403滑雪AC代码

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

aiwangyi6的博客 186

3D打印切片软件Cura及CuraEngine原理分析

引言         年初开始进入3D打印行业,受命以Cura为基础,研发一款自主的3D打印切片软件。         自主研发要取其长处,补其不足,首先自然是要搞清楚Cura到底做了什么,读Cura的代码是必需的。我一向都觉得比起自己写代码来,读别人的代码是一个漫又而痛苦的过程,读者的思想与写者总有偏差,往往又无法验证自己的猜想是否正确,只叹人脑不是电脑,无法把眼前的代码从头到尾执行一遍...

AiDiShengDeXiaoWu的博客 4421

ROS2 Nav2实战:解决rviz2显示no map received的3种实用方法(附详细步骤)

本文针对ROS2 Nav2导航栈中rviz2显示“no map received”的常见问题,提供了三种核心解决方案。深入剖析了问题根源在于ROS2生命周期节点管理、QoS策略不匹配及坐标系设置错误,并分别通过手动配置流程、集成生命周期管理器以及调优QoS策略与固化rviz2配置,给出了详细的实战步骤,确保地图数据可靠显示。

j0k1l2m3n的博客 422

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

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

m0_74236193的博客 364

LAMMPS实操系列(一): 大量FCC-CoCrCuFeNi高熵合金建模与最稳定结构筛选

高熵合金(High-entropy alloys,HEA),是由五种或五种以上等量或大约等量金属形成的合金。由于高熵合金可能具有许多优秀的物理化学性质,因此在材料科学领域受到广泛关注

Ceshigo_CD的博客 3257

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

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

OWCYKH的博客 899

《Zephyr OS 入门与实战》第5章:内存管理策略

【代码】《Zephyr OS 入门与实战》第5章:内存管理策略。

2301_79143213的博客 349

二极管钳位电路、限幅电路和检波电路Multisim电路仿真

本文系统介绍了二极管钳位、限幅和检波三种基础电路的工作原理及Multisim仿真验证。钳位电路通过电容-二极管配合实现波形整体平移,将波峰或波谷固定在指定电压;限幅电路利用二极管导通特性削除信号超出设定阈值的部分;检波电路则通过半波整流和电容滤波从调幅波中提取音频信号。三种电路均通过Multisim仿真验证了理论分析结果,展示了二极管在信号处理中的关键作用。这些基础电路广泛应用于信号调理、电平保护和通信解调等领域。

XU157303764的博客 1124

【洛谷】【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

【人工智能】提示词工程:让大模型精准响应的核心技术,提示词的基础框架 以及 常见提示词框架及场景

编写提示词的基础原则包括:简单、明确、详细,提示词拥有零样本提示、少样本提示、分配角色、提示写作风格、限定输出格式等技巧。

奶爸的编程之路,也就一周冷个三天 1138

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

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

Y的博客 418

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

洛谷P1434 [SHOI2002] 滑雪

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

2402_88149600的博客 414

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

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

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

空空的池子 401

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

洛谷 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、付费专栏及课程。

余额充值