滑雪
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 88484   Accepted: 33177

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

分析:看到这个题感觉好简单,直接递归就写好了,提交居然TLE了。那么就需要一些小技巧了,先干掉动态分配二维数组,然后定义一个二维数组gawDis[]用来记录对应节点的最长路径,后面再用到这个节点的时候就不需要再计算了。
综上:递归+记忆化dfs搜索
 #include <stdio.h>
#include <stdlib.h> #define MAXNUM 101 int gawMap[MAXNUM][MAXNUM];
int gawRow;
int gawColumn;
int gawDis[MAXNUM][MAXNUM]; int max(int a, int b)
{
if(a>b)
return a;
else
return b;
} int Ski(int wlasthigh, int *awlastposition)
{
int awposition[] = {};
int wleft = ;
int wright = ;
int wup = ;
int wdown = ; if(gawDis[awlastposition[]][awlastposition[]] != )
{
return gawDis[awlastposition[]][awlastposition[]];
}
if(awlastposition[] > )
{
awposition[] = awlastposition[]-;
awposition[] = awlastposition[];
if(wlasthigh > gawMap[awposition[]][awposition[]])
{
wleft = Ski(gawMap[awposition[]][awposition[]], awposition) + ;
}
}
if(awlastposition[] < gawColumn-)
{
awposition[] = awlastposition[]+;
awposition[] = awlastposition[];
if(wlasthigh > gawMap[awposition[]][awposition[]])
{
wright = Ski(gawMap[awposition[]][awposition[]], awposition) + ;
}
}
if(awlastposition[] > )
{
awposition[] = awlastposition[]-;
awposition[] = awlastposition[];
if(wlasthigh > gawMap[awposition[]][awposition[]])
{
wup = Ski(gawMap[awposition[]][awposition[]], awposition) + ;
}
}
if(awlastposition[] < gawRow-)
{
awposition[] = awlastposition[]+;
awposition[] = awlastposition[];
if(wlasthigh > gawMap[awposition[]][awposition[]])
{
wdown = Ski(gawMap[awposition[]][awposition[]], awposition) + ;
}
}
wleft = max(wleft, wright);
wup = max(wup, wdown);
return gawDis[awlastposition[]][awlastposition[]] = max(wleft, wup);
} int main(void)
{
int i = ;
int j = ;
scanf("%d %d", &gawRow, &gawColumn); for(i=; i<gawRow; i++)
{
for(j=; j<gawColumn; j++)
{
scanf("%d", &gawMap[i][j]);
}
} int awposition[] = {};
for(i=; i<gawRow; i++)
{
for(j=; j<gawColumn; j++)
{
awposition[] = j;
awposition[] = i;
Ski(gawMap[awposition[]][awposition[]], awposition);
}
} int wLen = ;
for(i=; i<gawRow; i++)
{
for(j=; j<gawColumn; j++)
{
if(wLen < gawDis[i][j]) wLen = gawDis[i][j];
}
}
printf("%d\n", wLen); return ;
}

北大poj-1088的更多相关文章

  1. 北大POJ题库使用指南

    原文地址:北大POJ题库使用指南 北大ACM题分类主流算法: 1.搜索 //回溯 2.DP(动态规划)//记忆化搜索 3.贪心 4.图论 //最短路径.最小生成树.网络流 5.数论 //组合数学(排列 ...

  2. POJ 1088 滑雪(记忆化搜索)

    滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 92384   Accepted: 34948 Description ...

  3. POJ 1088 滑雪(记忆化搜索+dp)

    POJ 1088 滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 107319   Accepted: 40893 De ...

  4. POJ 1088

    http://poj.org/problem?id=1088 一道中文题,这道题如果不限时的话,是个简单的搜索,但限时的话,就要用记忆化搜索 所谓记忆化搜索就是对每一次搜索的结果进行记录,然后之后的如 ...

  5. POJ 1088 滑雪 (记忆化搜索)

    题目链接:http://poj.org/problem?id=1088 题意很好懂,就是让你求一个最长下降路线的长度. dp[i][j]记录的是i j这个位置的最优的长度,然后转移方程是dp[i][j ...

  6. POJ 1088 滑雪 -- 动态规划

    题目地址:http://poj.org/problem?id=1088 Description Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当 ...

  7. OpenJudge/Poj 1088 滑雪

    1.链接地址: bailian.openjudge.cn/practice/1088 http://poj.org/problem?id=1088 2.题目: 总Time Limit: 1000ms ...

  8. poj 1088 滑雪(区间dp+记忆化搜索)

    题目链接:http://poj.org/problem?id=1088 思路分析: 1>状态定义:状态dp[i][j]表示在位置map[i][j]可以滑雪的最长区域长度: 2>状态转移方程 ...

  9. poj 1088 (dfs+记忆化) 滑雪

    题目;http://poj.org/problem?id=1088 感觉对深搜还不太熟练,所以练习一下,类似于连连看的那题,注意的是所求的是最大达长度,并不是从最大的或者最小的点出发得到的就是最长的路 ...

  10. POJ 1088 滑雪 【记忆化搜索经典】

    题目链接:http://poj.org/problem?id=1088 滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions:  ...

随机推荐

  1. 移动端网站的内容触摸滑动-Swiper插件

    手机平板等大多移动端站点都会有触摸滑动内容的功能,公司移动端站点(m.muzhiwan.com)的标题广告滑动以及轮播效果就是用的Swiper插件. Swiper就是常用于移动端网站的内容触摸滑动的一 ...

  2. 【转】SVN管理多个项目版本库

    转载地址:http://blog.163.com/zhangxuemin_zy/blog/static/10178565520115704031799/ SVN管理多个项目版本库:   安装SVN服务 ...

  3. Linux常见命令汇总

    1.rz sz上传下载 若未安装使用:yum install lrzsz 安装 上传: rz 覆盖上传: rz -y 下载: sz bbb.jpg

  4. PetaPoco的几个特性

    在PetaPoco中,Brad并没有定义太多Attribute来修饰Models或Fields.这些为数不多的几个Attribute如下: ColumnAttribute ExplicitColumn ...

  5. redis安装与基本配置

    获取下载包 wget http://download.redis.io/releases/redis-2.8.24.tar.gz 解压和编译 tar -zxvf redis-2.8.24.tar.gz ...

  6. 关于Extjs MVC模式上传文件的简单方式

    Extjs新手研究上传文件的事情估计是件很头痛的问题,毕竟,我就在头痛.最近两天一直在忙文件上传问题,终于小有收获. 用的是Extjs+MVC3.0+EF开发,语言为C#.前台window代码显示列内 ...

  7. 深入浅出设计模式——适配器模式(Adapter Pattern)

    模式动机 在软件开发中采用类似于电源适配器的设计和编码技巧被称为适配器模式. 通常情况下,客户端可以通过目标类的接口访问它所提供的服务.有时,现有的类可以满足客户类的功能需要,但是它所提供的接口不一定 ...

  8. nginx 负载均衡策略

    nginx 负载均衡策略   1. 轮询轮询方式是nginx负载均衡的默认策略,根据每个server的权重值来轮流发送请求,例如:upstream backend {server backend1.e ...

  9. IE下div使用margin:0px auto不居中的原因

    IE下div使用margin:0px auto不居中的原因 一般在将div居中显示时,使用css: divX {margin:0 auto;} 此css在firefox下是好的,但是在ie下不起作用, ...

  10. dataserver test code

    main.go package main import ( "database/sql" "fmt" "log" "net/htt ...