羅区P1434 [SHOI2002]スキー(DFS +メモリ検索)

メモリの検索について:https://blog.csdn.net/hjf1201/article/details/78680814

トピックへのリンク:https://www.luogu.org/problem/P1434

アイデア:結果はポイントの上に発見されているが、この点についての検索に必要な次の時間を節約する、格納された結果の直接の使用が戻ります。注意シークは最長パスです

#include <cstdioを> 
する#include <iostreamの> 
する#include <アルゴリズム> 
の#include <cmath> 
の#include <キュー> 
の#include <ベクトル> 
の#include <CStringの> 
する#include <地図>
 の#define MEM(A)のmemset(、 0、はsizeof(a))が
 使用 名前空間STDを、
typedefの長い 長いLLL。
const  int型 MAXN = 200005 ;
constの LLL INF = 0x3f3f3f3f3f INT DIR [ 8 ] [ 2 ] = { 2112、 - 21、 - 122、 - 11、 - 2、 - 2、 - 1、 - 1、 - 2 }。
INT DIR2 [ 4 ] [ 2 ] = { 010、 - 110、 - 10 }。
ブールフラグ。
INT [ 105 ] [ 105 ]、VIS [105 ] [ 105 ]、ANS、R、C。
INT DFS(int型のx、int型のY){
   //   COUT << X << " "<< Y <<"" << CNT << ENDL。
   // VIS [X] [Y] = 1。
    もし(!VIS [X] [Y] = 0を返すVISが[X] [Y]。
    int型の T、TT = 1 、I;
    (i = 0 ; iは< 4 ; iは++ 
    { 
     int型の FX = X + DIR2 [I] [ 0 ]、FY = Y + DIR2 [I] [ 1 ]。
     もし(FX> 0 && FX <0 && FY <C + 1 && [FX] [FY] < [X] [Y])
     { 
         T = DFS(FX、FY)+ 1 
         TT = MAX(T、TT)。
     } 
    } 
    VIS [X] [Y] = MAX(TT、VIS [X] [Y])。
    戻りVIS [X] [Y]。
} 
int型のmain()
{ 

    CIN >> R >> C。
    int型 iは= 1 ; I <= R iが++ 
    { 
        ためINT J = 1 ; J <= C; J ++ 
            CIN >>[I] [J]。
    } 
    のためにint型 I = 1 ; I <= R iは++ 
    { 
        ためのint型 J = 1 ; J <= C; J ++ 
        { 
            // COUT <<「============= =」<<てendl;
            // coutの<< "I = "<< I <<" J =" << J <<てendl; 
            VIS [I] [J] = DFS(i、j)は;; 
            ANS = MAX(ANS、VIS [I] [J]);
           // coutの<< "==============" <<てendl; 
        } 
    } 
    COUT << ANS << ENDL。
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/LLLAIH/p/11297384.html