• POJ1088 滑雪


    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

    Source

     
     
    正解:DP
    解题报告:
      水题一道,鉴定完毕。
      裸裸的DP题,开始想先排序,后来觉得没必要,直接往下走直到不能走为止,并只向低的方向更新一下就可以了。
      代码如下:
     
     
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 #include<cstring>
     5 #include<cstdlib>
     6 #include<algorithm>
     7 #include<vector>
     8 using namespace std;
     9 const int MAXN = 101;
    10 int n,m;
    11 int ans;
    12 int a[MAXN][MAXN],f[MAXN][MAXN];
    13 int mov[4][2]={{0,1},{1,0},{-1,0},{0,-1}};
    14 
    15 inline int dp(int x,int y){
    16     if(f[x][y]!=0) return f[x][y];
    17     int nowD=0;
    18     for(int i=0;i<4;i++) {
    19     int nowx=x+mov[i][0],nowy=mov[i][1]+y;
    20     if(nowx>0 && nowy>0 && nowx<=n && nowy<=m && a[nowx][nowy]<a[x][y]) {
    21         int Max=dp(nowx,nowy);
    22         if(Max>nowD) nowD=Max;
    23     }
    24     }
    25     f[x][y]=nowD+1;
    26     return nowD+1;
    27 }
    28 
    29 int main()
    30 {
    31     scanf("%d%d",&n,&m);
    32     for(int i=1;i<=n;i++)
    33     for(int j=1;j<=m;j++)
    34         scanf("%d",&a[i][j]);
    35 
    36     for(int i=1;i<=n;i++)
    37     for(int j=1;j<=m;j++){
    38         f[i][j]=dp(i,j);
    39         if(f[i][j]>ans) ans=f[i][j];
    40     }
    41 
    42     printf("%d",ans);
    43 
    44     return 0;
    45 }
  • 相关阅读:
    Vue-router的实现原理
    get请求被浏览器跨域的同源策略请求机制拦截,但是get请求是否请求到了服务器呢
    合并两个有序链表
    JS实现链式调用 a().b().c()
    CSS知识点总结
    BK-信息查找、摘取
    radar图生成用户guideline
    【转】 mybatis 详解(七)------一对一、一对多、多对多
    【转】 mybatis 详解(六)------通过mapper接口加载映射文件
    【转】 mybatis 详解(五)------动态SQL
  • 原文地址:https://www.cnblogs.com/ljh2000-jump/p/5568760.html
Copyright © 2020-2023  润新知