zoukankan      html  css  js  c++  java
  • P1434 [SHOI2002]滑雪

    题目描述

    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


    解析:

    不明白为什么好多人要排序,记忆化搜索不是很简单吗。。。

    设dp[i][j]表示到i行j列的最长长度。需要的时候直接调用,最后别忘了加上1(加上他自己)

    (边界条件一定要设置好,我把小于号写成大于号调了10分钟。。。

    最后直接打擂台取最大值就得了。

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 using namespace std;
     5 int r,c,a[105][105],dp[105][105],maxn;
     6 inline int read(){
     7     int x=0,f=1;char ch=getchar();
     8     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
     9     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    10     return x*f;
    11 }
    12 inline int dfs(int x,int y) {//记搜
    13     if(dp[x][y]!=0)return dp[x][y];
    14     int s=0;
    15     if(x-1>=1&&a[x][y]>a[x-1][y])s=max(s,dfs(x-1,y)+1);
    16     if(y+1<=c&&a[x][y]>a[x][y+1])s=max(s,dfs(x,y+1)+1);
    17     if(x+1<=r&&a[x][y]>a[x+1][y])s=max(s,dfs(x+1,y)+1);
    18     if(y-1>=1&&a[x][y]>a[x][y-1])s=max(s,dfs(x,y-1)+1);
    19     dp[x][y]=max(dp[x][y],s);
    20     return dp[x][y];
    21 }
    22 int main() {
    23     r=read();c=read();//读入优化
    24     for(int i=1; i<=r; i++) {
    25         for(int j=1; j<=c; j++) {
    26             a[i][j]=read();
    27         }
    28     }
    29     for(int i=1; i<=r; i++) {
    30         for(int j=1; j<=c; j++) {
    31             maxn=max(maxn,dfs(i,j)+1);
    32         }
    33     }
    34     cout<<maxn<<endl;
    35     return 0;
    36 }
    View Code

      

  • 相关阅读:
    PHPCMS网站关站了打不开-站长真的凉了吗?
    PHPCMS倒闭关站后,国内CMS系统该何去何从
    企业网站建设如何选择cms建站系统
    网站建设之常用CMS系统的SEO优化特点总结
    PageAdmin CMS仿站教程,如此简单就可以自己建网站
    c#之lamda表达式的前世今生
    c#之Linq的原理讲解及封装自己的Linq
    三大CMS建站系统助你免费建网站
    网站建设的完整流程来了,新手必看
    从零自学Java-7.使用数组存储信息
  • 原文地址:https://www.cnblogs.com/szmssf/p/10699956.html
Copyright © 2011-2022 走看看