滑雪
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 97172   Accepted: 36843

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

仔细分析,这题满足 dp 的无后效性,从一个点出发以后是不可能回到这个点的。我们需要按照高度从到到小来转移,这样写起来未免会有些麻烦,代码上不好实现。借助于记忆化搜索的方法可以解决这个问题,记忆化搜索的思想是对于每个状态,只要搜索一次以后,记录下这个状态的最优值,以后在需要用到这个状态就不必要搜索了,因为无后效性,最优永远都不变。

 #include <iostream>
#include <cstring>
using namespace std;
int a[][];
int dp[][];
int r, c;
int xx[]={,-,,};
int yy[]={,,,-};
int dfs(int x,int y){
if (dp[x][y]!=-){
return dp[x][y];
}
int ret=;
for (int i=;i<;++i){
int tx=x+xx[i];
int ty=y+yy[i];
if (tx>= && tx<r && ty>= && ty<c && a[tx][ty]<a[x][y]){
ret=max(ret,dfs(tx,ty));
}
}
return dp[x][y]=ret+;
} int main(){
scanf("%d%d",&r,&c);
for (int i=;i<r;++i){
for (int j=;j<c;++j){
scanf("%d",&a[i][j]);
}
}
memset(dp,-,sizeof(dp));
int ans=;
for (int i=;i<r;++i){
for (int j=;j<c;++j){
if (dp[i][j] == -){
ans = max(ans,dfs(i,j));
}
}
}
printf("%d\n", ans);
system("pause");
return ;
}

代码

POJ滑雪的更多相关文章

  1. poj 3311 floyd+dfs或状态压缩dp 两种方法

    Hie with the Pie Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6436   Accepted: 3470 ...

  2. 91. Decode Ways

    题目: A message containing letters from A-Z is being encoded to numbers using the following mapping: ' ...

  3. poj3月题解

    poj2110 二分答案+bfs判定 poj2112 二分答案+最大流判定(二分答案真乃USACO亲儿子) poj1986 裸的LCA,值得注意的是,树中任意两点的距离可以等于这两点到根的距离减去2* ...

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

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

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

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

  6. OpenJudge/Poj 1088 滑雪

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

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

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

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

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

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

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

随机推荐

  1. Chapter 4 : Control Structures 1 : Selection

    Although it need not be, the expression is usually an identifier. Whether it is an identifieror an e ...

  2. Java_深度剖析ConcurrentHashMap

    本文基于Java 7的源码做剖析. ConcurrentHashMap的目的 多线程环境下,使用Hashmap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用Hash ...

  3. OI回忆录——一个过气OIer的制杖历程

    初中 初一参加学校信息学选修课,一周一节课,学pascal. 初一寒假(大约是)入选(其实是钦定吧)当时加上我只有3人的校队(我当然是最弱的一个. 当时甚至有幸得到叉姐授课(现在才知道这是多么难得的机 ...

  4. 解决国内NPM安装依赖速度慢问题

      版权声明:本文为博主原创文章,转载请注明原文地址. http://blog.csdn.net/rongbo_j/article/details/52106580 不知道各位是否遇到这种情况,使用N ...

  5. Android adb 串口调试

    adb (串口输入) echo 1 > /sys/class/remount/need_remount; mount -o rw,remount /system                  ...

  6. 加密传输:每位数字+6,然后用除以9的余数代替该数字, 在把第一位和第四位交换,第二位和第三位交换,例如3276->3840

    /** * @author:(LiberHome) * @date:Created in 2019/3/6 10:00 * @description: * @version:$ */ /*今日目标:5 ...

  7. 一个LinkedBlockingQueue线程安全的例子

    一个LinkedBlockingQueue线程安全的例子 package llj.mf.ace; import java.util.ArrayList; import java.util.HashSe ...

  8. 容器—stack

    c++ stl栈stack介绍 C++ Stack(堆栈) 是一个容器类的改编,为程序员提供了堆栈的全部功能,——也就是说实现了一个先进后出(FILO)的数据结构. c++ stl栈stack的头文件 ...

  9. Python通过简单的文件读写,来实现注册登录

    # -*- coding:utf-8 -*- '''''' username = input('请输入您的姓名:') password = input('请输入密码:') with open('get ...

  10. c++第三次实验

    第一题: 先把代码贴上来 main.cpp #include <iostream> #include <cstdlib> #include<conio.h> #in ...