zoukankan      html  css  js  c++  java
  • vijos 1011 清帝之惑之顺治

    背景

    顺治帝福临,是清朝入关后的第一位皇帝。他是皇太极的第九子,生于崇德三年(1638)崇德八年八月二ten+six日在沈阳即位,改元顺治,在位18年。卒于顺治十八年(1661),终24岁。

    顺治即位后,由叔父多尔衮辅政。顺治七年,多尔衮出塞射猎,死于塞外。14岁的福临提前亲政。顺治帝天资聪颖,读书勤奋,他吸收先进的汉文化,审时度势,对成法祖制有所更张,且不顾满洲亲贵大臣的反对,倚重汉官。为了使新兴的统治基业长治久安,他以明之兴亡为借鉴,警惕宦官朋党为祸,重视整饬吏治,注意与民休息,取之有节。但他少年气盛,刚愎自用,急噪易怒,当他宠爱的董妃去世后,转而消极厌世,终于匆匆走完短暂的人生历程,英年早逝。他是清朝历史上唯一公开归依禅门的皇帝。

    描述

    顺治喜欢滑雪,这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待太监们来载你。顺治想知道载一个区域中最长的滑坡。

    区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子:

    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 <= 500)。下面是R行,每行有C个整数,代表高度h,0<=h<=10000。

    输出格式

    输出最长区域的长度。

    样例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
    

    限制

    各个测试点2s

    来源

    Vivian Snow

    dp + dfs

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    const int MAX_N = 505 ;
    int temp[MAX_N][MAX_N];
    int dp[MAX_N][MAX_N];
    int visit[MAX_N][MAX_N];
    int dirx[4] = {-1,1,0,0};
    int diry[4] = {0,0,1,-1};
    int r,c;
    int maxn = 1;
    int solve(int x,int y){
        if(visit[x][y]) return dp[x][y];
        visit[x][y]=1;
        int flag=0;
        for(int i=0;i<4;i++)
        {
            int nx=x+dirx[i];
            int ny=y+diry[i];
            if(nx<1 || nx>r || ny<1 || ny>c || temp[nx][ny]>=temp[x][y]) continue;
            flag=1;
            dp[x][y]=max(dp[x][y],solve(nx,ny)+1);
        }
        if(flag==0) dp[x][y]=1;
        maxn=max(maxn,dp[x][y]);
        return dp[x][y];
    }
    int main(){
    
        cin>>r>>c;
        for(int i = 1; i <= r; i++)
            for(int j = 1; j <= c; j++)
                cin>>temp[i][j];
    
    
        for(int i = 1; i <= r; i++)
            for(int j = 1; j <= c; j++)
              solve(i,j);
    
        cout<<maxn<<endl;
        return 0;
    }
  • 相关阅读:
    LeetCode 40. 组合总和 II(Combination Sum II)
    LeetCode 129. 求根到叶子节点数字之和(Sum Root to Leaf Numbers)
    LeetCode 60. 第k个排列(Permutation Sequence)
    LeetCode 47. 全排列 II(Permutations II)
    LeetCode 46. 全排列(Permutations)
    LeetCode 93. 复原IP地址(Restore IP Addresses)
    LeetCode 98. 验证二叉搜索树(Validate Binary Search Tree)
    LeetCode 59. 螺旋矩阵 II(Spiral Matrix II)
    一重指针和二重指针
    指针的意义
  • 原文地址:https://www.cnblogs.com/zhenggaoxiong/p/8735065.html
Copyright © 2011-2022 走看看