滑雪
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. Posix消息队列

    转载于:http://blog.csdn.net/zx714311728/article/details/53197196 1.消息队列 消息队列可以认为是一个消息链表,消息队列是随内核持续的.队列中 ...

  2. ajax完整结构

    $.ajax({ url:"服务器", data:{"key":所传数据}, type:"post", dataType:"jso ...

  3. 10-JS数组

    数组的定义和创建 数组是值得有序集合.JavaScript数组是无类型的. 数组对象的作用是:使用单独的变量名来存储一系列的值. 数组的创建 有两种向数组赋值的方法(你可以添加任意多的值,就像你可以定 ...

  4. 四大开源协议比较:BSD、Apache、GPL、LGPL (转)

    转自:http://www.lupaworld.com/portal.php?mod=view&aid=205552&page=all 本文参考文献:http://www.fsf.or ...

  5. Apache Solr 访问权限控制

    Current state of affairs SSL support was added in version 4.2 (SolrCloud v4.7). Protection of Zookee ...

  6. C#带小括号的运算

    计算类的封装 jisuan.cs using System; using System.Collections.Generic; using System.Linq; using System.Tex ...

  7. osg渲染数据高程文件

    使用gdal解析DEM文件,将高程数据转换为HeightField对象,然后在osg渲染. 1 源代码 #include <gdal_priv.h> #include <osgVie ...

  8. Android studio环境搭建

    首先要下载jdk,下载好以后配置环境变量,这里略过,不会的可以百度搜索,这里附上jdk下载地址:http://pan.baidu.com/s/1Xrmqy 下载Android studio 软件,下载 ...

  9. Oracle10g_Dataguard__161031

    1.查看  redo log 信息 1.1.desc v$log ZC: 不明白这是查看什么信息... 1.2. 查看redo log file SQL> select * from v$log ...

  10. bridge

    1 意图:将抽象部分与实现部分分离,使得它们都可以独立地变化 2 别名:Handle/Body 3 动机:客户在创建窗口时应该不涉及到具体实现部分.仅仅是窗口的实现部分依赖于应用运行的平台. 客户代码 ...