博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
dp --- 二维dp + 最大上升子序列
阅读量:7227 次
发布时间:2019-06-29

本文共 1762 字,大约阅读时间需要 5 分钟。

 

滑雪

Time Limit: 1000MS

 

Memory Limit: 65536K

Total Submissions: 74477

 

Accepted: 27574

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

 

开始遇到这道题的时候感觉无从下手,什么二维矩阵dp想了好半天,最后也是百度了下才做出来的,主要书不知道怎么和最长上升子序列联系在一起,当明白了思路后才发现原来就是一道水题,但是也给这类型的题目提供了一种思路,所以还是值得总结一下。

【题目分析】

他给我们的是一个矩阵,矩阵里面的数值相当于高中地理里面学的海拔,让你找一条最长的下降线路出来,每次只可以往上下左右四个方向走。

收哦先这题是建立在dp里面的最长下降子序列的基础上的,现在的问题是怎么处理二维这样的情况。

如果二维矩阵中的某个坐标是(x,y),那么它上下两个坐标就是(x±1,y),左右两个坐标就是(x,y±1),我们在遍历的时候可以通过这个条件来判断是否是该点的上下左右四个坐标。

既然可以知道是否是相邻坐标了,那么怎么走就只是遍历的问题了。

首先按照高度递增排一下序,然后就是求最长上升子序列了。

 

//Memory   Time//  392K      360MS#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MAX 110#define LL long longusing namespace std;struct Node{int x,y,h;};Node a[MAX*MAX];int dp[MAX*MAX];int n,m;bool cmp(Node a,Node b){ return a.h
>n>>m){ int cnt=0; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>a[cnt].h,a[cnt].x=i,a[cnt].y=j,cnt++; memset(dp,0,sizeof(dp)); dp[0]=1; sort(a,a+cnt,cmp); int ans=1; for(int i=1;i
tmp) tmp=dp[j]; if(abs(a[i].x-a[j].x)==0&&abs(a[i].y-a[j].y)==1&&a[j].h
tmp) tmp=dp[j]; } dp[i]=tmp+1; if(dp[i]>ans) ans=dp[i]; } cout<
<

  

 

 

 

转载于:https://www.cnblogs.com/crazyacking/p/3838373.html

你可能感兴趣的文章
关于Java中分层中遇到的一些问题
查看>>
配置 PM2 实现代码自动发布
查看>>
android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
查看>>
iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
查看>>
诡异!React stopPropagation失灵
查看>>
Python_OOP
查看>>
个人博客开发系列:评论功能之GitHub账号OAuth授权
查看>>
mongodb--安装和初步使用教程
查看>>
ES6简单总结(搭配简单的讲解和小案例)
查看>>
text-decoration与color属性
查看>>
如何使用Mybatis第三方插件--PageHelper实现分页操作
查看>>
PyCharm搭建GO开发环境(GO语言学习第1课)
查看>>
Android交互
查看>>
提醒我喝水chrome插件开发指南
查看>>
列表数据转树形数据
查看>>
Java新版本的开发已正式进入轨道,版本号18.3
查看>>
从零开始的webpack生活-0x009:FilesLoader装载文件
查看>>
在electron中实现跨域请求,无需更改服务器端设置
查看>>
gitlab-ci配置详解(一)
查看>>
听说你叫Java(二)–Servlet请求
查看>>