• 洛谷P1434 滑雪【记忆化搜索】


    题目https://www.luogu.org/problemnew/show/P1434

    题意:

    给一个矩阵,矩阵中的数字代表海拔高度。

    现在要找一条最长路径,使得路径上的海拔是递减的。

    思路:

    如果从点(i,j)出发的最长递减路径已知(假设是s),那么如果从点(x,y)可以到达点(i,j),路径s一定也包含在从点(x,y)出发的最长递减路径中。

    因此我们用一个数组记录从某一点开始的最长递减路径的长度,进行搜索。

    如果搜索到某一点已经有解就不继续搜索而是直接返回答案。

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #include<map>
     4 #include<set>
     5 #include<iostream>
     6 #include<cstring>
     7 #include<algorithm>
     8 #include<vector>
     9 #include<queue>
    10 
    11 using namespace std;
    12 typedef long long LL;
    13 typedef pair<int, int> pr;
    14 
    15 int r, c;
    16 int height[105][105];
    17 int lane[105][105]; 
    18 int dx[4] = {1, -1, 0, 0};
    19 int dy[4] = {0, 0, -1, 1};
    20 
    21 bool check(int x, int y)
    22 {
    23     return (x > 0 && x <= r && y > 0 && y <= c);
    24 }
    25 
    26 void dfs(int i, int j)
    27 {
    28     int ans = 1;
    29     if(lane[i][j])return;
    30     for(int k = 0; k < 4; k++){
    31         int x = i + dx[k];
    32         int y = j + dy[k];
    33         if(check(x, y) && height[x][y] < height[i][j]){
    34             if(!lane[x][y]){
    35                 dfs(x, y);
    36             }
    37             ans = max(ans, lane[x][y] + 1);
    38         }
    39     }
    40     lane[i][j] = ans;
    41     return ;
    42 }
    43 
    44 int main()
    45 {
    46     scanf("%d%d", &r, &c);
    47     for(int i = 1; i <= r; i++){
    48         for(int j = 1; j <= c; j++){
    49             scanf("%d", &height[i][j]);
    50         }
    51     }
    52     
    53     int ans = 0;
    54     for(int i = 1; i <= r; i++){
    55         for(int j = 1; j <= c; j++){
    56             dfs(i, j);
    57             ans = max(ans, lane[i][j]);
    58         }
    59     }
    60     printf("%d
    ", ans);
    61     return 0;
    62 }
  • 相关阅读:
    linux command ubuntu
    C++ project
    windows command line
    vi command
    C++ Language
    postgresql backup
    C Language
    L1-046. 整除光棍(模拟除法)
    pta 拯救007(Floyd)
    CCF 201609-4 交通规划
  • 原文地址:https://www.cnblogs.com/wyboooo/p/10356158.html
Copyright © 2020-2023  润新知