• 【动态规划】skiing


    【动态规划】skiing

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 34  解决: 15
    [提交][状态][讨论版]

    题目描述

    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更长。事实上,这是最长的一条。

    输入

    第一行表示有几组测试数据,输入的第二行表示区域的行数R和列数C(1 <= R,C <= 100)。下面是R行,每行有C个整数,代表高度h,0<=h<=10000。
    后面是下一组数据;

    输出

    输出最长区域的长度。

    样例输入

    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
    

    样例输出

    25

    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    #include <iostream>
    #include <cstring>
    using namespace std;
    int t,r,c,h[111][111],f[111][111];
     
    int ff(int a,int b)
    {
     
        if(h[a][b]>h[a-1][b])
            f[a][b]=max(f[a][b],ff(a-1,b)+1);
        if(h[a][b]>h[a+1][b])
            f[a][b]=max(f[a][b],ff(a+1,b)+1);
        if(h[a][b]>h[a][b-1])
            f[a][b]=max(f[a][b],ff(a,b-1)+1);
        if(h[a][b]>h[a][b+1])
            f[a][b]=max(f[a][b],ff(a,b+1)+1);
        return f[a][b];
    }
     
    int main()
    {
        while(cin>>t)
        {
            int maxx;
            while(t--)
            {
                cin>>r>>c;
                memset(f,0,sizeof(f));
                memset(h,0,sizeof(h));
                for(int i=1;i<=r;i++)
                    for(int j=1;j<=c;j++)
                    {
                        cin>>h[i][j];
                        f[i][j]=1;
                    }
     
                maxx=0;
                for(int i=1;i<=r;i++)
                    for(int j=1;j<=c;j++)
                        maxx=max(maxx,ff(i,j));
                cout<<maxx<<endl;
            }
        }
        return 0;
    }
     
     
  • 相关阅读:
    Kernel panic
    elasticsearch5.4 安装篇
    nginx 切割日志文件
    dl 320e gen8 v2 安装2008 r2 系统
    idea开发配置
    红黑树
    二叉搜索树
    Object
    nginx
    docker
  • 原文地址:https://www.cnblogs.com/asuml/p/5734392.html
Copyright © 2020-2023  润新知