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

相关推荐

避免踩坑!杰理AC63蓝牙名修改常见问题及解决方案(含BLE后缀处理)

本文详细解析了杰理AC63蓝牙设备名称修改的全过程,包括基础操作、BLE后缀处理及高级调试技巧。针对蓝牙名修改中的常见问题,提供了实用的解决方案和代码示例,帮助开发者避免踩坑并实现高效定制。

q6r7s8t9的博客 412

洛谷:P1434 [SHOI2002] 滑雪 题解

洛谷:P1434 [SHOI2002] 滑雪 题解

qq_61935738的博客 859

ANSA二次开发在线帮助:ANSA和μETA API文档

  为了方便大家学习ANSA二次开发,我将ANSA和μETA二次开发的官方文档整合到了我的个人网站CAECoder中,大家点击ANSA和μETA API官方帮助文档进行访问即可查看。   本站也将开展对ANSA和μETA API文档的翻译工作,请大家持续关注! ANSA和μETA API文档   ANSA和μETA脚本接口是一个应用程序编程接口(API),允许开发人员访问ANSA和μETA核心功能和数据。   ANSA和μETAAPI是Python编程语言的扩展。 Python Python简.

CAECoder 4321

洛谷P1403滑雪AC代码

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

aiwangyi6的博客 186

基于RK3588的高效音视频对讲系统设计与实现

本文详细介绍了基于RK3588芯片的高效音视频对讲系统设计与实现。文章深入剖析了RK3588在8K编解码、高性能音频DSP及丰富接口方面的优势,并提供了从开发环境搭建、分层软件架构设计,到视频采集编码、音频回声消除及低延迟网络传输的完整实战指南,旨在帮助开发者充分利用该芯片硬件能力,构建稳定、低延迟的实时通信系统。

dapp9builder的博客 256

从原理到应用:深入解析双编码器在机器人关节力矩感知中的实现

本文深入解析了双编码器方案在机器人关节力矩感知中的实现原理与应用。该方案通过在电机侧和输出侧分别安装编码器,利用两者位置差异间接高精度计算外力,克服了传统电流环精度不足和扭矩传感器成本高昂的缺点。它为实现协作机器人的丝滑拖动示教、灵敏碰撞检测以及足式机器人的动态平衡与柔顺控制提供了关键技术支撑,是目前高性能机器人力控的主流选择。

t8u9v0w1x的博客 662

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

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

m0_74236193的博客 364

C语言实战:最小二乘法在传感器数据校准中的应用(附完整代码)

本文详细介绍了如何使用C语言实现最小二乘法,对传感器数据进行线性校准。通过模拟带噪声的传感器数据,手把手演示了从核心算法实现、参数计算到效果验证的完整流程,并提供了可直接编译运行的完整源码,帮助嵌入式开发者解决传感器数据不准的常见问题,提升系统测量精度。

weixin_28025327的博客 516

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

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

OWCYKH的博客 899

Thor芯片部署

英伟达Jetson Thor芯片性能分析与应用现状 摘要:英伟达最新发布的Jetson Thor芯片基于Blackwell架构,官方宣称AI算力达2070TFLOPS(FP4),较前代Orin提升7.5倍,配备14核Arm CPU和128GB内存。然而实际量产版算力缩水至700TOPS,且因4nm制程良率问题多次延期至2025-2026年交付。该芯片支持FP4/FP8量化、Transformer引擎等先进特性,适用于自动驾驶、机器人等边缘AI场景,但受供应链限制,国内厂商倾向自研方案。开发者可通过JetPa

xiaomu_347的博客 431

基于STM32、HAL库的IP2736U_EF快充协议芯片简介及驱动程序设计

@param connected: 连接状态指针 (1=已连接, 0=未连接)= 0x2736) // 检查厂商ID。* @param hip: IP2736U句柄指针。* @param hip: IP2736U句柄指针。* @param hip: IP2736U句柄指针。* @param hip: IP2736U句柄指针。* @param hip: IP2736U句柄指针。* @param hip: IP2736U句柄指针。* @param hip: IP2736U句柄指针。

corlin6688的博客 430

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

【PCIe 总线及设备入门学习专栏 1.3 -- PCIe 基础知识 lane和link介绍】

PCIe RC(Root Complex)是PCIe树的根节点,一个RC 可以包括多个 RP(Root Port),例如一个16 条 lane的PCIe RC 可以包括4个RP(4个x4的),或者8个RP(8个x2的)等等。在该模式下,数据传送由CPU执行I/O端口指令来按照字节或更大的数据单位来处理,占用大量的CPU资源,数据传输速度也大大低于DMA模式。国内应该有公司做出相应的phy芯片(例如芯动科技、牛芯半导体),毕竟常见的pcie 3.0才8 Gbps的速率,最新的6.0才64Gbps。

CodingCos的博客 2104

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

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

Y的博客 418

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

洛谷P1434 [SHOI2002] 滑雪

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

2402_88149600的博客 414

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

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

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

空空的池子 401

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

余额充值