本文讲述动态规划的经典问题——滑雪

采用递推的动态规划方式求解

先用结构体保存每个点对应的原本坐标位置和高度;

将所有点按高度从小到大排序;

用一个二维数组保存输入的原本数据,

再用一个二维数组保存对应位置的最大滑行距离;

从第二个点开始求解(因为第一个点高度最低,显然滑行距离为1)

依次和它在原本坐标里的上下左右四个方向进行判断,

如果它比某一方向上的高度高,则它的滑行距离就应该是相比较的最大滑行距离+1和它保存的最大滑行距离中的最大值

最后求完总共的点,进行遍历,得到最终最大值即可!

Description

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更长。事实上,这是最长的一条。

Input

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

Output

输出最长区域的长度。

Sample Input

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

Sample Output

25

解题代码:

#include<bits/stdc++.h>
using namespace std;
struct point{int r,c,h;
}ps[10100];
bool cmp(point a,point b){return a.h < b.h;   //根据高度从小到大排序,依次求解
}
int f[110][110];  //保存输入的数组
int ans[110][110]; //保存求值的结果
int main(){int n,m; //行列 的数cin>>n>>m;//输入数组for(int i=0;i<n;i++)for(int j=0;j<m;j++){cin>>f[i][j];ps[i * m + j].h = f[i][j];ps[i * m + j].r = i;ps[i * m + j].c = j;ans[i][j] = 1;    //初始化完成}sort(ps,ps+n*m,cmp);//开始求解for(int i = 1;i < n*m;i++){int r = ps[i].r;int c = ps[i].c;  //得到行列的值//进行四个方向的判断if(r > 0 && ps[i].h > f[r-1][c])  //向上ans[r][c] = max(ans[r][c],ans[r-1][c]+1);if(c > 0 && ps[i].h > f[r][c-1])  //向左ans[r][c] = max(ans[r][c],ans[r][c-1]+1);if(r < n-1 && ps[i].h > f[r+1][c])  //向下ans[r][c] = max(ans[r][c],ans[r+1][c]+1);if(c < m-1 && ps[i].h> f[r][c+1])  //向右ans[r][c] = max(ans[r][c],ans[r][c+1]+1);}//输出结果int maxl = 0;for(int i=0;i<n;i++)for(int j=0;j<m;j++)maxl = max(maxl,ans[i][j]);cout<<maxl<<endl;return 0;
}

动态规划——滑雪(洛谷 P1434)相关推荐

  1. 【动态规划】洛谷 P1282 多米诺骨牌

    [动态规划]洛谷 P1282 多米诺骨牌 时间限制: 1 Sec  内存限制: 128 MB 题目描述 多米诺骨牌有上下2个方块组成,每个方块中有1~6个点.现有排成行的 上方块中点数之和记为S1,下 ...

  2. P1164 小A点菜(DP动态规划,洛谷,java)

    洛谷链接:https://www.luogu.org/problem/P1164 i写成了j,改了nnnnn久!!!! import java.util.Scanner; class Main{pub ...

  3. P1002 过河卒(dp动态规划,洛谷,java)

    洛谷链接:https://www.luogu.com.cn/problem/P1002 import java.util.Scanner;public class Main { public stat ...

  4. 洛谷—P1434 [SHOI2002]滑雪题解

    题目链接: P1434 [SHOI2002]滑雪 解题思路: 在这道题中dfs每种情况是,可能这个点之前已经搜过了,没必要再去搜索了,因此不如存储记住,就没必要再去dfs了.所以我们要记忆化搜索解决这 ...

  5. [洛谷]P1434 [SHOI2002] 滑雪

    P1434 [SHOI2002] 滑雪 1.题目 2.分析 3.代码 1.map + dp 70 原因分析:当key相同时,map会覆盖掉先前的值!! 2.优先队列priority_queue + d ...

  6. 洛谷 P1434 [SHOI2002] 滑雪(优先队列+dp / 记忆化搜索)

    P1434 [SHOI2002] 滑雪https://www.luogu.com.cn/problem/solution/P1434 优先队列+dp 本题状态转移方程一目了然 为了保证状态间无后效性, ...

  7. 洛谷P1434 [SHOI2002]滑雪

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

  8. 滑雪(洛谷-P1434)

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

  9. 洛谷P1434滑雪(逆向图的遍历搜索递归+记忆化,最长路问题)

    题目链接:https://www.luogu.org/problemnew/show/P1434 刚开始最先想到的就是正向递归遍历,遍历所有情况方法,记录找到最长的,正向递归遍历也不难写,但会超时. ...

最新文章

  1. bzoj1715[Usaco2006 Dec]Wormholes 虫洞
  2. mysql外键约束创建及删除_MySQL中的外键的创建,约束和删除
  3. HTMLCSS 问题
  4. Linux使用技巧15则
  5. JAVA入门级教学之(成员内部类)
  6. 娄底八中的初中计算机考试,众人同心勤耕耘 敢叫日月换新天
  7. android 基本知识
  8. 如何在本地管理和切换多个 github 账号?
  9. sm总线控制器找不到驱动程序_细说嵌入式系统下的驱动程序设计
  10. C#静态方法与非静态方法的比较 <转载>
  11. 如何做爬虫python在线观看_Python爬虫实战:利用scrapy,短短50行代码下载整站短视频...
  12. cropper初始化_【jQuery插件分享】Cropper——一个简单方便的图片裁剪插件
  13. 周伟焜:IBM为何重造信仰
  14. python核心编程 第3版_Python核心编程(第3版)PDF高清晰完整中文版
  15. Vue自定义组件之时间跨度选择器
  16. 西瓜微数独家解析: 干货管饱|帮你省XXX万广告费的KOL投放指南
  17. 2022计算机保研心得
  18. 树莓派做网络调试陪试机
  19. 番外篇:STM32之GPIO口速率配置究竟代表什么
  20. ERP需求和销售管理 华夏

热门文章

  1. 数据库 索引、存储、引擎这几个的优缺点
  2. Vue中$nextTick的理解
  3. java类型提升_java表达式中类型的自动提升(转)
  4. rxvt_为什么我使用rxvt作为终端
  5. devops_DevOps适合所有人
  6. raspberry pi_用Raspberry Pi制作婴儿监视器
  7. inkscape使用_使用Inkscape和咖啡渣DIY怪异的瓶子标签
  8. git 还原文件到其他版本_如何在Git中还原旧文件版本
  9. JavaScript 使用对象及ES6中的class
  10. JSON 语法之JSON null