题目链接

题目

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

Source

SHTSC 2002

题解

知识点:记忆化搜索,线性dp。

显然dp,设 \(dp[i][j]\) 为从 \((i,j)\) 出发的最长距离,从高到矮转移,有转移方程:

\[dp[i][j] = \max (dp[i-1][j],dp[i][j-1],dp[i+1][j],dp[i][j+1])
\]

注意到,无法线性递推,于是可以记忆化搜索。

时间复杂度 \(O(nm)\)

空间复杂度 \(O(nm)\)

代码

#include <bits/stdc++.h>

using namespace std;

int n, m;
int h[107][107], dp[107][107];
const int dir[4][2] = { {1,0},{-1,0},{0,1},{0,-1} }; int f(int x, int y) {
if (dp[x][y]) return dp[x][y];
dp[x][y] = 1;
for (int i = 0;i < 4;i++) {
int xx = x + dir[i][0];
int yy = y + dir[i][1];
if (xx <= 0 || xx > n || yy <= 0 || yy > m || h[xx][yy] >= h[x][y]) continue;
dp[x][y] = max(dp[x][y], f(xx, yy) + 1);
}
return dp[x][y];
} int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
memset(h, 0x3f, sizeof(h));
cin >> n >> m;
int mx = 1, my = 1;
for (int i = 1;i <= n;i++) {
for (int j = 1;j <= m;j++) {
cin >> h[i][j];
if (h[i][j] < h[mx][my]) mx = i, my = j;
}
}
int ans = 0;
for (int i = 1;i <= n;i++)
for (int j = 1;j <= m;j++)
ans = max(ans, f(i, j));
cout << ans << '\n';
return 0;
}

POJ1080 滑雪的更多相关文章

  1. tyvj1004 滑雪

    描述     trs喜欢滑雪.他来到了一个滑雪场,这个滑雪场是一个矩形,为了简便,我们用r行c列的矩阵来表示每块地形.为了得到更快的速度,滑行的路线必须向下倾斜.    例如样例中的那个矩形,可以从某 ...

  2. bzoj 2753: [SCOI2012] 滑雪与时间胶囊 Label:MST

    题目描述 a180285非常喜欢滑雪.他来到一座雪山,这里分布着M条供滑行的轨道和N个轨道之间的交点(同时也是景点),而且每个景点都有一编号i(1<=i<=N)和一高度Hi.a180285 ...

  3. USACO 2014 JAN 滑雪录像

    2. 滑雪录像{silver题3} [问题描述] 冬奥会的电视时刻表包含N (1 <= N <= 150)个节目,每个节目都有开始和结束时间.农民约翰有两台录像机,请计算他最多可以录制多少 ...

  4. USACO 滑雪课程

    #include<cstdio> #include<iostream> using namespace std; int T,S,N,maxd; ],lv[],next[],f ...

  5. Bzoj2753 [SCOI2012]滑雪与时间胶囊

    2753: [SCOI2012]滑雪与时间胶囊 Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 2282  Solved: 796 Descriptio ...

  6. 滑雪 why WA

    滑雪 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 587  Solved: 219 Description 小明喜欢滑雪,因为滑雪的确很刺激,可是为了获 ...

  7. 滑雪(简单dp)

    Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 81099   Accepted: 30239 Description Mic ...

  8. Code[VS] 2152 滑雪题解

    Code[VS] 2152 滑雪题解 题目描述 Description trs喜欢滑雪.他来到了一个滑雪场,这个滑雪场是一个矩形,为了简便,我们用r行c列的矩阵来表示每块地形.为了得到更快的速度,滑行 ...

  9. E - 滑雪

    Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Pract ...

  10. POJ 1088滑雪

    滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 89168   Accepted: 33474 Description ...

随机推荐

  1. linux 安装配置 jdk8

    转载请注明出处: 1.下载 jdk 在 Linux 环境的安装包.可以在官网下载, 官网连接:https://www.oracle.com/java/technologies/javase/javas ...

  2. JavaScript : 获取文件名后缀

               /** 获取文件后缀               *               * indexOf 和 lastIndexOf 都是索引文件            indexO ...

  3. [转帖]linux内存挂载

    1.主要功能 在linux中,为了提高读写速度,可以将内存挂载到目录,常见的文件格式有tmpfs和ramfs. 2.挂载步骤 $ sudo mkdir /mnt/tmp $ sudo mkdir /m ...

  4. [转帖]【性能】中断绑定和查看|irqbalance 中断负载均衡|CPU瓶颈

    常用命令 ``` # 查看当前运行情况 service irqbalance status # 终止服务 service irqbalance stop 取消开机启动: chkconfig irqba ...

  5. Ant Design Vue封装a-drawer

    1.创建子组件 <template> <a-drawer :title="drawerInfo.customTitle" :placement="pla ...

  6. 在K8S中,Pod重启策略有哪些?

    在Kubernetes(简称K8s)中,Pod的重启策略定义了当容器失败时kubelet如何处理.有三种主要的重启策略: Always: 这是默认的重启策略.如果设置了为"Always&qu ...

  7. Spring源码之XML文件中Bean标签的解析2

    读取XML文件,创建默认bean标签对象的核心代码 在DefaultBeanDefinitionDocumentReader类中的如下方法中: protected void processBeanDe ...

  8. 批量修改SVN的用户名和密码的尝试

    起源 公司规定每6个月需要修改一次密码,否则每天都有邮件和内网提醒.因为邮箱密码和svn等一系列应用绑定,避免每次修改密码后需要手工输入修改多个svn仓库的帐号和密码. PS.同一个前缀的svn不用重 ...

  9. 解决问题:ACM-Reference-Format使用这个style后,文献引用顺序和正文不一致

    解决问题:latex中bib引用顺序不正确,引用顺序和正文不一致_丨汀.的博客-CSDN博客问题:生成pdf时文献应用会乱序引用bib格式的参考文献时,会这么写:\bibliographystyle{ ...

  10. 8.10 TLS线程局部存储反调试

    TLS(Thread Local Storage)用来在进程内部每个线程中存储私有的数据.每个线程都会拥有独立的TLS存储空间,可以在TLS存储空间中保存线程的上下文信息.变量.函数指针等.TLS其目 ...