Time Limit: 10 second

Memory Limit: 2 MB

问题描述

滑雪是一项非常刺激的运动,为了获得速度,滑雪的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待 升降机来载你。给出一个由二维数组表示的滑雪区域,数组的数字代表各点的高度。请你找出这个区域中最长的滑坡。

下面是一个例子:

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

输入文件ski.in的第一行为两个数R, C,表示滑雪区域的行数和列数(1≤R,C≤100)。下面是R行,每行有C个整数,表示高度H(0≤H≤10000)。

Output

输出文件ski.out包括一行,只包含一个整数,表示滑雪区域中最长滑坡的长度。

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
【题解】
这题很容易想到从每一个点都进行一次深搜。然后记录一下最长滑坡是多少就好。
但是如果只是这样。没有办法通过100*100的数据(平台上的数据很水没有到100*100的。)
所以要改进一下。
加上一个f[x][y]数组,表示到x,y这个点后能下降多长的长度。因为某个点所能达到的最长长度是确定的,所以我们一旦访问到这个点直接返回f[x][y]这个值就可以了。这样可以节省很多时间。
不,应该说每个点都只会访问一次。这个算法是最优的了。
对了,这个叫记忆化搜索
【代码】
#include <cstdio>
#include <cstring> const int dx[5] = {0,0,0,1,-1};
const int dy[5] = {0,1,-1,0,0}; int r,c,a[101][101],f[101][101],ma = 0; void input_data()
{
scanf("%d%d",&r,&c);
for (int i = 1;i <= r;i++) //输入数据的过程
for (int j = 1;j <= c;j++)
scanf("%d",&a[i][j]);
memset(f,255,sizeof(f)); //255表示给f数组全部赋值为-1
} int dfs(int x,int y) //尝试从x,y这个点开始下降
{
if (f[x][y] !=-1) //如果这个点之前已经找过了最长长度
return f[x][y]; //则直接返回就可以了
int m = 0;
for (int i = 1;i <= 4;i++) //否则往4个方向进行搜索
{
int xx = x + dx[i],yy = y + dy[i];
if (xx < 1) continue;
if (xx > r) continue;
if (yy < 1) continue;
if (yy > c) continue; //越界的情况剔除掉
if (a[xx][yy] < a[x][y]) //如果满足下降条件
{
int te = dfs(xx,yy);
if (te > m) //从4个方向中找到最大的
m = te;
}
}
f[x][y] = m + 1; //加上本身是一个 所以加1
return m+1; //返回给上一层 递归
} void get_ans()
{
for (int i = 1;i <= r;i++) //从每个点都搜索一次
for (int j = 1;j <= c;j++)
{
int temp = dfs(i,j);
if (temp > ma)
ma = temp;
} } void output_ans()
{
printf("%d",ma);
} int main()
{
//freopen("F:\\rush.txt","r",stdin);
input_data();
get_ans();
output_ans();
return 0;
}

【a901】滑雪的更多相关文章

  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. Win8.1部署 .NET Framework 3.5 安装方式

    Windows 8.1中包含.NET Framework,操作系统安装过程中默认安装 .NET Framework 4.5.1.如果程序需要.NET Framework 3.5支持,将自动启用相关功能 ...

  2. sql server中新增一条数据后返回该数据的ID

    开发中遇到的问题:在新增一条数据后往往不需要返回该数据的ID,但是有的时候可能需要返回该数据的ID以便后面的编程使用. 在这里介绍两种方法: 其一:使用存储过程: create procedure a ...

  3. 图灵机器人API,适用于微信、微博、QQ群、智能硬件等

    该API有智能聊天.查天气.查快递.查菜谱.查车票.查航班.查出行.查周边等近500个功能,能够用在微信公众平台.QQ群.手机语音助手.智能硬件等领域\ [1].[代码] [PHP]代码 跳至 [1] ...

  4. ajax+客户端与服务器端的交互

    一. AJAX 原生JS var xhr=new XMLHttpRequest(); xhr.open("GET","[请求地址]",false); xhr.o ...

  5. 将一个类写成WebService服务的形式

    WebService是一种跨编程语言和跨操作系统平台的远程调用技术,主要解决不同语言写的应用程序之间.不同平台(linux/windows/andrid)之间的通信,即异构系统之间的通信. 常用的天气 ...

  6. Javascript和jquery事件-鼠标移入移出事件

    javascript使用mouseover和mouseout,只在css中支持hover jquery支持mouseover和mouseout,封装了mouseenter.mouseleave事件函数 ...

  7. Centos NFS 简单设置

    Server 端: NFS的安装配置:centos 5 :yum install nfs-utils portmapcentos 6 :yum install nfs-utils rpcbind vi ...

  8. SimpleDateFormat的使用问题

    今天对过去的代码进行重构,因为使用静态方法调用的原因,使用了一个静态的SimpleDateFormat,结果FindBug报错了,查看了一下,说是使用了静态的SimpleDateFormat对象. S ...

  9. error app/styles/components/iconfont.scss (Line 12: Invalid GBK character "\xE5")

    因为要用到iconfont,引入iconfont到sass文件后,出现编译sass文件错误,如下截图: 解决方法:在顶部设置编码格式 @charset "utf-8"; 编译成功!

  10. Oracle-18-select语句初步&amp;SQL中用算术表达式&amp;别名的使用&amp;连接运算符%distinct&amp;where子句

    一.一般SELECT语句的格式例如以下: 1.查询指定表的全部列 select * from 表名 [where 条件] [group by 分组列名] [having 聚合函数] [order by ...