zoukankan      html  css  js  c++  java
  • poj 1088

    #include <iostream>
    #include <algorithm>
    using namespace std;
    #define N 100
    int m,n;
    int high[N][N]={0};
    int len[N][N] = {0};//将每个数的最长下降长度记录下来,在递归的时候可以避免每次遍历所有点
    int nextGo[4][2]={{0,1},{1,0},{0,-1},{-1,0}};//四个方向
    int dp(int i,int j){
        if (len[i][j] != 0) {
            return len[i][j];
        }
        int x,y,mx=0;
        for(int k=0;k<4;k++){
            x = i + nextGo[k][0];
            y = j + nextGo[k][1];
            if (x < 0 || x > m - 1 || y < 0 || y > n - 1) {//将出界的情况跳过
                continue;
            }
            if (high[i][j] > high[x][y]) {
                mx = max(mx, dp(x, y));//选择自己最大序列下降
            }
        }
        len[i][j] = mx + 1;//自己本身也有长度1
        return len[i][j];
    }
    int main() {
        cin>>m>>n;
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                cin >> high[i][j];
            }
        }
        int result = 0;//所有点里选择最长的
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                result = max(result, dp(i, j));
            }
        }
        cout<<result<<endl;
        return 0;
    }

    对出界情况的处理是从别人代码里学到的

  • 相关阅读:
    P1005 矩阵取数
    [BZOJ2662][BeiJing wc2012]冻结
    [BZOJ1191]超级英雄Hero
    [bzoj1008] 越狱
    [bzoj1001]狼抓兔子 最小割
    网络流24题——负载平衡问题
    分形小山
    可并堆——左偏树、斜堆
    NOIP最优贸易
    洛谷P2073送花
  • 原文地址:https://www.cnblogs.com/zhaoGavin/p/8582262.html
Copyright © 2011-2022 走看看