滑雪
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 79519   Accepted: 29581

Description

Michael 喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个 区域中最长底滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子

  1. 1 2 3 4 5

  2. 16 17 18 19 6

  3. 15 24 25 20 7

  4. 14 23 22 21 8

  5. 13 12 11 10 9

一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。在上面的例子中,一条可滑行的滑坡为24-17-16-1。当然25-24-23-...-3-2-1更长。事实上,这是最长的一条。

Input

输入的第一行表示区域的行数R和列数C(1 <= R,C <= 100)。下面是R行,每行有C个整数,代表高度h,0<=h<=10000。

Output

输出最长区域的长度。

Sample Input

  1. 5 5
  2. 1 2 3 4 5
  3. 16 17 18 19 6
  4. 15 24 25 20 7
  5. 14 23 22 21 8
  6. 13 12 11 10 9

Sample Output

  1. 25
  2.  
  3. 代码:
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <ctype.h>
  5. #include <time.h>
  6. #include <math.h>
  7. #include <iostream>
  8. #include <string>
  9. #include <queue>
  10. #include <algorithm>
  11. #define INF 0x3f3f3f3f
  12. #define N 100+2
  13. #define R_for(i, n) for(i=0; i<n; i++)
  14. #define r_for(i, n) for(i=1; i<=n; i++)
  15. #define D_for(i, n) for(i=n-1; i>=0; i--)
  16. #define d_for(i, n) for(i=n; i>=1; i--)
  17.  
  18. using namespace std;
  19. int n, m;
  20. int map[N][N];
  21. int dis[N][N];
  22. int f[4][2]= {{0, -1}, {0, 1}, {-1, 0}, {1, 0} };
  23. struct node
  24. {
  25. int x, y;
  26. } t;
  27. int ans;
  28.  
  29. int DFS(int posi, int posj)
  30. {
  31. int i;
  32. if(dis[posi][posj]!=0)
  33. return dis[posi][posj];
  34.  
  35. for(i=0; i<4; i++)
  36. {
  37. int xx=posi+f[i][0];
  38. int yy=posj+f[i][1];
  39.  
  40. if((xx>=0&&xx<n)&&(yy>=0&&yy<m) && map[xx][yy]<map[posi][posj])
  41. {
  42. int dd=DFS(xx, yy);
  43. if(dis[posi][posj]<=dd)
  44. dis[posi][posj]=dd+1;
  45. }
  46. }
  47. return dis[posi][posj];
  48. }
  49.  
  50. int main()
  51. {
  52. int i, j;
  53.  
  54. while(scanf("%d %d", &n, &m)!=EOF)
  55. {
  56. R_for(i, n)
  57. R_for(j, m)
  58. {
  59. scanf("%d", &map[i][j] );
  60. }
  61.  
  62. memset(dis, 0, sizeof(dis));
  63.  
  64. ans=-1;
  65. R_for(i, n)
  66. {
  67. R_for(j, m)
  68. {
  69. int dd=DFS(i ,j);
  70. if(dd>ans)
  71. {
  72. ans=dd;
  73. }
  74. }
  75. }
  76. printf("%d\n", ans+1);
  77. }
  78. return 0;
  79. }

POJ 1088 滑雪 ( DFS+动态规划思想 )的更多相关文章

  1. POJ 1088 滑雪 DFS 记忆化搜索

    http://poj.org/problem?id=1088 校运会放假继续来水一发^ ^ 不过又要各种复习,功课拉下了许多 QAQ. 还有呀,就是昨天被一个学姐教育了一番,太感谢了,嘻嘻^ ^ 好了 ...

  2. POJ 1088 滑雪(记忆化搜索+dp)

    POJ 1088 滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 107319   Accepted: 40893 De ...

  3. POJ 1088 滑雪(记忆化搜索)

    滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 92384   Accepted: 34948 Description ...

  4. POJ 1088 滑雪 【记忆化搜索经典】

    题目链接:http://poj.org/problem?id=1088 滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions:  ...

  5. POJ 1088 滑雪 -- 动态规划

    题目地址:http://poj.org/problem?id=1088 Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当 ...

  6. [ACM] poj 1088 滑雪 (内存搜索DFS)

    滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 73409   Accepted: 27141 Description ...

  7. poj 1088 滑雪 DP(dfs的记忆化搜索)

    题目地址:http://poj.org/problem?id=1088 题目大意:给你一个m*n的矩阵 如果其中一个点高于另一个点 那么就可以从高点向下滑 直到没有可以下滑的时候 就得到一条下滑路径 ...

  8. POJ 1088 滑雪(模板题 DFS+记忆化)

    Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道 ...

  9. OpenJudge/Poj 1088 滑雪

    1.链接地址: bailian.openjudge.cn/practice/1088 http://poj.org/problem?id=1088 2.题目: 总Time Limit: 1000ms ...

随机推荐

  1. (BruteForce)暴力破解经典题目总结

    在算法竞赛中,很多问题是来不及用数学公式推导出来的.或者说根本就找不到数学规律,这时我们就需要使用枚举来暴力破解. 不过枚举也是需要脑子的,一味的暴力只能超时.因此我这里选择了几道mooc上经典的题目 ...

  2. extjs常用技巧

    grid http://extjs.org.cn/node/590 监听 http://extjs.org.cn/node/593 总结 http://extjs.org.cn/node/641 常用 ...

  3. Ubuntu 16.04安装Wine版的迅雷+QQ(完美方案,终极解决方法)

    安装前先备份好系统! 继上一篇安装QQ的方法http://www.cnblogs.com/EasonJim/p/7425978.html,这一篇的QQ采用的是Wine模式安装.完美解决消息记录中文乱码 ...

  4. can-i-win(好)

    https://leetcode.com/problems/can-i-win/ package com.company; import java.util.*; class Solution { / ...

  5. String空格删除和java删除字符串最后一个字符的几种方法

    1. String.trim()trim()是去掉首尾空格2.str.replace(" ", ""); 去掉所有空格,包括首尾.中间复制代码 代码如下:Str ...

  6. LattePanda 项目之 P2.2 起飞条件检测系统(CLI & GUI)

    前言 原创文章,转载引用务必注明链接,水平有限,如有疏漏,欢迎指正. 本文使用Markdown写成,为获得更好的阅读体验和正常的链接.图片显示,请访问我的博客原文: http://www.cnblog ...

  7. 小数运算需要注意什么? 接口和抽象类 WinForm窗体上两个panel,怎么实现一个panel固定漂浮在另一个panel之上

    小数运算需要注意什么? 1. 生活中0.1+0.2=0.3, 计算机中可不是这样,为什么呢? 大家都知道计算机类型都是有数据范围的.整形int范围是 正负21亿左右,小数类型同样也是有范围的,但是即使 ...

  8. anaconda的所有版本大全--下载地址

    地址: https://repo.continuum.io/archive/ 内容: Anaconda installer archive Filename Size Last Modified MD ...

  9. ListView的异步载入(笔记,多线程和AsyncTask)

    异步载入最经常使用的两种方式: 多线程,线程池     AsyncTask 实例操作: 从一个站点上获取Json数据.然后将数据在ListView上显示. 1.创建item_layout布局 , 改动 ...

  10. 制作一个塔防游戏 Cocos2d-x 2.1.4 (一)

    在这篇文章,将会学习到怎样制作一个塔防游戏.在这其中,学习怎样在设定的时间内出现一波波的敌人,使这些敌人沿着指定的路点前进.怎样在地图上指定的位置创建炮塔.怎样使炮塔射击敌人,怎样可视化调试路点和炮塔 ...