noip模拟题(越野滑雪)

这是一道关于越野滑雪比赛的数学问题,涉及到二维表格中的海拔高度和关键格子。滑雪者的路径难度取决于相邻格子海拔差的绝对值。需要找到所有关键格子相互可达的最小难度值。解决方案包括使用dp、最小生成树或二分搜索配合深度优先搜索。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                   noip模拟题(越野滑雪题目描述

乡村越野滑雪比赛在一个m×n(1<=m,n<=500)的二维表格中进行,每个格子的海拔在[0,1000000000]之间。滑雪者可以从一个格子滑到相邻格子,(可以从高处滑到低处,也可以从低处滑到高处),两者之间的海拔差的绝对值为其难度值。相邻的格子是指有公共边的格子。一条路径的难度值是指该路径上相邻两格子的难度值的最大值。现在给出若干个关键格子,求所有这些关键格子相互可达的最小的难度值。

输入
第1行:2个整数M和N
接下来M行,每行N个整数,表示各网格的高度
接下来M行,每行N个0或者1,1表示关键网格
输出
第1行:1个整数,表示最小的D
样例输入 Copy
3 5
20 21 18 99 5
19 22 20 16 26
18 17 40 60 80
1 0 0 0 1
0 0 0 0 0
0 0 0 0 1
样例输出 Copy
21
刚接到这道题的时候觉得这道题肯定用dp,但是我dp基本不会,所以最后这道题骗了一个样例分。
std正解:将格子看成点,将相邻的格子之间的难度系数看作边权,得到一个无向图。然后求包含给出的关键点的最小生成树,此处求最小生成树不是对边求和,而是找边的最大值。
如何知道关键点都已经连通了呢?可以对每个连通块记录其中包含的关键点的个数。当某个连通块包含的关键点个数等于最大值了,那么此时就可以退出程序了。

但我认为这样建图太过麻烦,我们老大旭哥,用bfs进行访问,也将题目ac了,我用的二分答案,
对mid进行判断,进行深搜访问,虽然时间慢了点,但还是ac了。下面献上垃圾代码一份,各位大神有其他解决方案的,献上代码。

#include<bits/stdc++.h>
#define smax 501
using namespace std;
int n,m,mmap[smax][smax];
int dir[4][2]={
  
  {0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值