nyoj 10 skiing(DAG上的最长路,备忘录方法)
skiing
- 描述
-
Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长底滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子
1 2 3 4 516 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更长。事实上,这是最长的一条。
- 输入
-
第一行表示有几组测试数据,输入的第二行表示区域的行数R和列数C(1 <= R,C <= 100)。下面是R行,每行有C个整数,代表高度h,0<=h<=10000。
后面是下一组数据; - 输出
- 输出最长区域的长度。
- 样例输入
-
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
跟矩形嵌套一样,还是DAG上的最长路,所不同的是本题只能搜索相邻节点(上下左右),而矩形嵌套下一个搜索节点可以为任何节点(所以我们可以做排序的优化),注意使用备忘录的方法减少搜索量,另外注意边界问题
#include<stdio.h>int dp[100][100];//备忘录
int arr[100][100];//DAG图
int R,C;//行、列int dfs(int i,int j)
{if(dp[i][j]>1){return dp[i][j];}int max=1;//保存上下左右四个方向的最长路if(arr[i][j]>arr[i][j-1]&&j-1>=0)//搜索左节点{int h=dfs(i,j-1)+1;if(h>max){max=h;}}if(arr[i][j]>arr[i][j+1]&&j+1<C)//搜索右节点{int h=dfs(i,j+1)+1;if(h>max){max=h;}}if(arr[i][j]>arr[i-1][j]&&i-1>=0)//搜索上节点{int h=dfs(i-1,j)+1;if(h>max){max=h;}}if(arr[i][j]>arr[i+1][j]&&i+1<R)//搜索下节点{int h=dfs(i+1,j)+1;if(h>max){max=h;}}return max;
}int main()
{int t;scanf("%d", &t);while(t--){scanf("%d%d",&R,&C);int i,j;for(i=0;i<R;i++){for(j=0;j<C;j++){scanf("%d",&arr[i][j]);dp[i][j]=1;//初始化为1,}}int res=0;for(i=0;i<R;i++){for(j=0;j<C;j++)//枚举起点{dp[i][j]=dfs(i,j);if(dp[i][j]>res){res=dp[i][j];}}}printf("%d\n",res);}
}
nyoj 10 skiing(DAG上的最长路,备忘录方法)相关推荐
- HDU 4562 守护雅典娜(DAG上的最长路)
理解错题意了...写的很麻烦,而且900+卡过... 1 #include <iostream> 2 #include <cstdio> 3 #include <cstr ...
- 图论 —— DAG 图的最长路
[概述] DAG 图的最长路问题是一个比较少见的问题,具体问题是:给出一个 DAG 图,寻找图中的最长路 在 AOE 网中,在找出关键路径后,对其进行 DFS 即可得到图的最长路,由于这种方法的实现过 ...
- [POJ3249]Test for Job [拓扑排序+DAG上的最长路径]
给定一张带点权的DAG 求一条入度为0节点到出度为0节点的最长路 把点权转化为边权(同时多源转化成单源):边u->v的权值为W[v],这样入度为0的节点权值会被遗漏,新开一个点0向入度为0的点u ...
- C - Coolest Ski Route(关于DAG图的最长路问题四种解法)
VJ链接 C - Coolest Ski Routehttps://vjudge.net/contest/491449#problem/C 首先是比赛中用的bfs写法 #include<iost ...
- NYOJ 10 skiing
skiing 时间限制:3000 ms | 内存限制:65535 KB 难度:5 描述 Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑 ...
- NYOJ 10 skiing (深搜和动归)
skiing 时间限制: 3000 ms | 内存限制: 65535 KB 难度: 5 描述 Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且 ...
- 嵌套矩形——DAG上的动态规划
有向无环图(DAG,Directed Acyclic Graph)上的动态规划是学习动态规划的基础.很多问题都可以转化为DAG上的最长路.最短路或路径计数问题. 题目描述: 有n个矩形,每个矩形可以用 ...
- (dag模型+最长路+字典序)嵌套矩形
题目: 有 n 个矩形,每个矩形可以用两个整数 a, b 描述,表示它的长和宽.矩形 X(a, b) 可以嵌套在矩形 Y(c, d) 中当且仅当 a<c, b<d,或者 b<c, a ...
- 【EOJ Monthly 2019.02 - E】中位数(二分 ,中位数 ,−1/1变换,dp求解DAG最长路)
题干: E. 中位数 单测试点时限: 10.0 秒 内存限制: 256 MB "你的地图是一张白纸,所以即使想决定目的地,也不知道路在哪里." QQ 小方最近在自学图论.他突然想出 ...
最新文章
- 写下今年1024的一篇文章
- python --- 基础多线程编程
- 触发ALV事件时报错MOVE_TO_LIT_NOTALLOWED_NODATA
- 开发原生的 Google 眼镜应用 【已翻译100%】(2/2)
- 【数据库系统】数据库系统的模式分层与数据独立性
- R语言自然语言处理:关键词提取与文本摘要(TextRank)
- 理解 Zend 框架 第 1 部分: 基础
- 解决Macbook安装win10/win11时遇到的WDF_Violation 蓝屏错误问题 - 安装Bootcamp驱动蓝屏
- 代码规范 : 关于注释和日志
- 2019年Java大厂面试题讲解(周阳) 之Github学习(自学路上助推器)
- Android自定义系列——10.PathMeasure
- 用原生JS实现3D轮播效果
- 360手机刷机·EdXposed安装和使用教程
- 熟练计算机数字键盘,总结:计算机键盘的盲打和快速输入技巧[1]
- HTTP的请求过程解析
- python数学建模
- java utf8无bom格式_关于java:编写没有BOM的UTF-8
- 美标C70600(BFe10-1-1)无缝管
- 3 种保护您的网站免受恶意攻击的方法
- 开源扫描仪的工具箱:安全行业从业人员自研开源扫描器合集