题目来源

http://www.tyvj.cn/p/1004

http://www.luogu.org/problem/show?pid=1434#

http://codevs.cn/problem/2152/

题目描述

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(从24开始,在1结束)。当然25-24-23―┅―3―2―1更长。事实上,这是最长的一条。

输入输出格式

输入格式:

输入的第一行为表示区域的二维数组的行数R和列数C(1≤R,C≤100)。下面是R行,每行有C个数,代表高度(两个数字之间用1个空格间隔)。

输出格式:

输出区域中最长滑坡的长度。

输入输出样例

输入样例#1:

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

输出样例#1:

25       

分析

     记忆化搜索。算法分析:由于一个人可以从某个点滑向上下左右向相邻的四个点之一,如上所示。而且仅当高度减小,对于任意一点[i,j],当他的高度小于与之相邻的四个点的高度时,这四个点可以滑向[i,j],用f[i,j]表示到[i,j]为止的最大的长度,f[i,j]=max{f(i+a,j+b)}+1,其坐标增量{(a,b)=[(1,0),(-1,0),(0,1),(0,-1)],0<i+a<=r,0<j+b<=c,high[i,j]<high[i+a,j+b]}。
        为了保证满足条件的f[i+a,j+b]在f[i,j]前算出,需要对高度排一次序,然后从大到小规划(高度)。最后再比较一下所有f[i,j]{0<i<=r,0<j<=c},找出其中最长的一条路线。我们还可以用记忆化搜索的方法,他的有点事不需要进行排序,按照行的顺序,利用递归逐点求出区域中到达此点的最长路径,每个点的最长路径只求一次。
const dx:array[..] of longint=(-,,,);
dy:array[..] of longint=(,,,-); var m,f:array[..,..] of longint;
r,c,i,j,p,t,ans:longint; function search(x,y:longint):longint;
var i,t,tmp,nx,ny:longint;
begin
if f[x,y]> then
begin
search:=f[x,y];
exit;
end;
t:=;
for i:= to do
begin
nx:=x+dx[i];
ny:=y+dy[i];
if (nx>=)and(nx<=r)and(ny>=)and(ny<=c)and(m[x,y]<m[nx,ny]) then
begin
tmp:=search(nx,ny)+;
if tmp>t then t:=tmp;
end;
end;
f[x,y]:=t;
search:=t;
end;
begin
readln(r,c);
ans:=;
for i:= to r do
for j:= to c do
read(m[i,j]);
for i:= to r do
for j:= to c do
begin
t:=search(i,j);
f[i,j]:=t;
if t>ans then ans:=t;
end;
writeln(ans);
end.

[codevs2152]滑雪的更多相关文章

  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 ...

随机推荐

  1. Class.forName、Class.class(属性)、getClass()的区别

    1.出现的时期不同:Class.forName()在运行时加载:Class.class和getClass()是在编译器加载2.Class.class只是在编译时用来存放类的相关信息,并没有实例化对象: ...

  2. Cassandra1.2文档学习(6)—— 客户端数据请求

    参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/architecture/a ...

  3. rm排除指定文件或指定文件夹下文件

    3.方法3,当前文件夹中结合使用grep和xargs来处理文件名: ls | grep -v keep | xargs rm #删除keep文件之外的所有文件 说明: ls先得到当前的所有文件和文件夹 ...

  4. linux编译相关知识

    (1)用g++编译程序时,-l 与-L各是什么意思 http://bbs.chinaunix.net/thread-107364-1-1.html 感谢作者 -l 表示:编译程序到系统默认路进搜索,如 ...

  5. MFC应用程序向导生成的文件

    比方说我们用Visio Studio创建了一个MFC应用程序,名称为Mysdi.在创建这个项目的时候,默认的会生成许多类和文件,就关于这些文件的内容和要点展开以下论述. 框架窗口类头文件 向导为项目M ...

  6. 7.MVC框架开发(创建层级项目)

    在一个项目比较大的时候,就会有多个层级项目 1)在项目中选定项目右建新建区域(新的层级项目),项目->右键->添加->区域,构成了一套独立的MVC的目录,这个目录包括Views,Co ...

  7. C#常用正则过滤

    //string regexstr = @"<[^>]*>"; //去除所有的标签 //@"<script[^>]*?>.*?< ...

  8. Lucene基础(一)--入门

    Lucene介绍 lucene的介绍,这里引用百度百科的介绍Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引 ...

  9. win10应用安装位置修改方法

    win10应用安装位置怎么改?很多用户升级win10的系统之后,对于win10应用装置的位置如何修改一直不知道如何解决,今天,小编就跟大家一起来看看如何修改win10应用装置的位置. win10应用安 ...

  10. 关于Spring运用过程中jar包报错问题

    使用Spring进行web开发时,第一步就是导入jar包,今天使用SPring Task开发定时器时,导入了好多次jar包,都是报错,不知道是因为jar包版本不同还是因为需要依赖的jar包没加入,反正 ...