skiing

时间限制:3000 ms  |  内存限制:65535 KB
难度:5
描述
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。当然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上的最长路,备忘录方法)相关推荐

  1. HDU 4562 守护雅典娜(DAG上的最长路)

    理解错题意了...写的很麻烦,而且900+卡过... 1 #include <iostream> 2 #include <cstdio> 3 #include <cstr ...

  2. 图论 —— DAG 图的最长路

    [概述] DAG 图的最长路问题是一个比较少见的问题,具体问题是:给出一个 DAG 图,寻找图中的最长路 在 AOE 网中,在找出关键路径后,对其进行 DFS 即可得到图的最长路,由于这种方法的实现过 ...

  3. [POJ3249]Test for Job [拓扑排序+DAG上的最长路径]

    给定一张带点权的DAG 求一条入度为0节点到出度为0节点的最长路 把点权转化为边权(同时多源转化成单源):边u->v的权值为W[v],这样入度为0的节点权值会被遗漏,新开一个点0向入度为0的点u ...

  4. C - Coolest Ski Route(关于DAG图的最长路问题四种解法)

    VJ链接 C - Coolest Ski Routehttps://vjudge.net/contest/491449#problem/C 首先是比赛中用的bfs写法 #include<iost ...

  5. NYOJ 10 skiing

    skiing 时间限制:3000 ms  |  内存限制:65535 KB 难度:5 描述 Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑 ...

  6. NYOJ 10 skiing (深搜和动归)

    skiing 时间限制: 3000 ms  |  内存限制: 65535 KB 难度: 5 描述 Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且 ...

  7. 嵌套矩形——DAG上的动态规划

    有向无环图(DAG,Directed Acyclic Graph)上的动态规划是学习动态规划的基础.很多问题都可以转化为DAG上的最长路.最短路或路径计数问题. 题目描述: 有n个矩形,每个矩形可以用 ...

  8. (dag模型+最长路+字典序)嵌套矩形

    题目: 有 n 个矩形,每个矩形可以用两个整数 a, b 描述,表示它的长和宽.矩形 X(a, b) 可以嵌套在矩形 Y(c, d) 中当且仅当 a<c, b<d,或者 b<c, a ...

  9. 【EOJ Monthly 2019.02 - E】中位数(二分 ,中位数 ,−1/1变换,dp求解DAG最长路)

    题干: E. 中位数 单测试点时限: 10.0 秒 内存限制: 256 MB "你的地图是一张白纸,所以即使想决定目的地,也不知道路在哪里." QQ 小方最近在自学图论.他突然想出 ...

最新文章

  1. 写下今年1024的一篇文章
  2. python --- 基础多线程编程
  3. 触发ALV事件时报错MOVE_TO_LIT_NOTALLOWED_NODATA
  4. 开发原生的 Google 眼镜应用 【已翻译100%】(2/2)
  5. 【数据库系统】数据库系统的模式分层与数据独立性
  6. R语言自然语言处理:关键词提取与文本摘要(TextRank)
  7. 理解 Zend 框架 第 1 部分: 基础
  8. 解决Macbook安装win10/win11时遇到的WDF_Violation 蓝屏错误问题 - 安装Bootcamp驱动蓝屏
  9. 代码规范 : 关于注释和日志
  10. 2019年Java大厂面试题讲解(周阳) 之Github学习(自学路上助推器)
  11. Android自定义系列——10.PathMeasure
  12. 用原生JS实现3D轮播效果
  13. 360手机刷机·EdXposed安装和使用教程
  14. 熟练计算机数字键盘,总结:计算机键盘的盲打和快速输入技巧[1]
  15. HTTP的请求过程解析
  16. python数学建模
  17. java utf8无bom格式_关于java:编写没有BOM的UTF-8
  18. 美标C70600(BFe10-1-1)无缝管
  19. 3 种保护您的网站免受恶意攻击的方法
  20. 开源扫描仪的工具箱:安全行业从业人员自研开源扫描器合集

热门文章

  1. 多部门数据分析需求,如何满足?
  2. 车来了赵祺:贴近业务,是DT时代第一驱动力
  3. SpringMVC中使用Interceptor拦截器
  4. Nginx源码分析(3)
  5. Javascript 方法大全
  6. 《Javascript高级程序设计》读书笔记之bind函数详解
  7. 100c之31:哥德巴赫猜想
  8. mongodb中分页显示数据集的学习
  9. 借助Sniffer分析网络流量
  10. Call 从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序。