<传送门>

滑雪

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<algorithm>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<vector>
#include<queue>
#include<stack>
#include<iomanip>
#include<string>
#include<climits>
#include<cmath>
#define MAX 110
#define LL long long
using 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<b.h;
}
int main()
{
// freopen("cin.txt","r",stdin);
// freopen("cout.txt","w",stdout);
while(cin>>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<cnt;i++){
int tmp=0;
for(int j=0;j<i;j++){
if(abs(a[i].x-a[j].x)==1&&abs(a[i].y-a[j].y)==0&&a[j].h<a[i].h&&dp[j]>tmp)
tmp=dp[j];
if(abs(a[i].x-a[j].x)==0&&abs(a[i].y-a[j].y)==1&&a[j].h<a[i].h&&dp[j]>tmp)
tmp=dp[j];
}
dp[i]=tmp+1;
if(dp[i]>ans)
ans=dp[i];
}
cout<<ans<<endl;
}
return 0;
}

  

dp --- 二维dp + 最大上升子序列的更多相关文章

  1. 关于二维DP————站上巨人的肩膀

    意匠惨淡经营中ing, 语不惊人死不休........ 前几天学了DP,做了个简单的整理,记录了关于DP的一些概念之类的,今天记录一下刚学的一个类型 ----关于二维DP 那建立二维数组主要是干嘛用的 ...

  2. 洛谷p1732 活蹦乱跳的香穗子 二维DP

    今天不BB了,直接帖原题吧  地址>>https://www.luogu.org/problem/show?pid=1732<< 题目描述 香穗子在田野上调蘑菇!她跳啊跳,发现 ...

  3. HDU - 2159 FATE(二维dp之01背包问题)

    题目: ​ 思路: 二维dp,完全背包,状态转移方程dp[i][z] = max(dp[i][z], dp[i-1][z-a[j]]+b[j]),dp[i][z]表示在杀i个怪,消耗z个容忍度的情况下 ...

  4. 传纸条 NOIP2008 洛谷1006 二维dp

    二维dp 扯淡 一道比较基本的入门难度的二维dp,类似于那道方格取数,不过走过一次的点下次不能再走(看提交记录里面好像走过一次的加一次a[i][j]的也AC了,,),我记得当年那道方格取数死活听不懂, ...

  5. 洛谷P1048 采药 二维dp化一维

    题目描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个 ...

  6. SGU 199 Beautiful People 二维最长递增子序列

    题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=20885 题意: 求二维最长严格递增子序列. 题解: O(n^2) ...

  7. To the Max 二维dp(一维的变形)

    Description Given a two-dimensional array of positive and negative integers, a sub-rectangle is any ...

  8. hdu6078 Wavel Sequence dp+二维树状数组

    //#pragma comment(linker, "/STACK:102400000,102400000") /** 题目:hdu6078 Wavel Sequence 链接:h ...

  9. 经典DP 二维换一维

    HDU 1024  Max Sum Plus Plus // dp[i][j] = max(dp[i][j-1], dp[i-1][t]) + num[j] // pre[j-1] 存放dp[i-1] ...

随机推荐

  1. 08_STP(数通华为)

    1. 网络拓扑 2. 激活生成树[SW1]stp mode stp [SW1]stp enable [SW2]stp mode stp [SW2]stp enable [SW3]stp mode st ...

  2. js-Cannot read property 'innerHTML' of null

    原因:1.$('#xxx') 或$('.xxx')不存在 2.$('#xxx')或$('.xxx')的值为空

  3. fastify nodejs框架

    fastify是一个快速低开销的nodjs web 框架,使用简单,扩展灵活,包含了基于扩展的开发方式, 同时官方为了方便开发plugin,提取了通用部分,方便模块化,同时我们可以在路由中添加sche ...

  4. Vue项目预渲染机制

    我们知道SPA有很多优点,不过一个缺点就是对(不是Google的)愚蠢的搜索引擎的SEO不友好,为了照顾这些引擎,目前主要有两个方案:服务端渲染(Server Side Rendering).预渲染( ...

  5. 64位下的InlineHook

    目录 x64下手工HOOK的方法 一丶HOOK的几种方法之远跳 1. 远跳 不影响寄存器 + 15字节方法 2.远跳 影响寄存器 + 12字节方法 3.影响寄存器,恢复寄存器 进行跳转. 4. 常用 ...

  6. shell脚本获取传入参数的个数

    ts.sh #!/bin/bash echo $# 输出 [root@redhat6 ~]# ./ts.sh para1 [root@redhat6 ~]# ./ts.sh para1 para2 [ ...

  7. [转]vscodesvn安装和使用

    原文链接:https://blog.csdn.net/wzh66888/article/details/90145340 1.安装svn插件 2.安装成功后会出现这样的图标 如果没有安装之后不能使用, ...

  8. odoo开发笔记 -- 还原数据库后,异常:ir_attachment: IOError: [Errno 2] No such file or directory: u'/var/...'

    场景描述: 恢复Odoo数据后,抛出错误导致无法进入页面 -- ::, INFO aeo odoo.addons.base.ir.ir_attachment: _read_file reading / ...

  9. Python3基础 print %xX 十六进制大小写

             Python : 3.7.3          OS : Ubuntu 18.04.2 LTS         IDE : pycharm-community-2019.1.3    ...

  10. redis支持远程接入的安全防护问题

    如果我们没有启用保护模式,支持远程接入,启用默认端口6379,而且是用root用户启动的,那么基本上redis就是在裸奔了,人家分分钟搞你没商量. 我们模拟一下,现在机器A(ip假设为10.100.1 ...