OpenJudge 1088スキー

合計時間制限:1000ミリ秒メモリの制限:65536kB

説明

スキーは非常にエキサイティングであるため、マイケルは、これは驚くべきことではありません百スキーをするのが好きです。しかし、スピードを得るためには、滑りやすい領域が下向きでなければならない、とあなたがベースにスライドさせたとき、あなたは再びグレードアップに持っているか、エレベーターがお連れするのを待ちます。マイケルは地域最長の地すべりに含まれている知りたいです。領域は、二次元アレイによって与えられます。各番号は、配列の点の高さを表しています。次に例を示します。

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

高さが低減されている場合のみならば人は、4点の一方に隣接する点から上下に摺動することができます。上記の例では、地滑りは24-17-16-1を惰行されます。もちろん25-24-23 -...- 3-2-1長いです。実際には、これは最長のものです。

エントリー

最初の行はRゾーンの入力行番号および列C(1 <= R、C <= 100)の数を表します。以下は、R列、高さHを表すC整数をそれぞれ有する行、0 <= hの<= 10000です。出力領域の最長。

サンプル入力

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

問題解決のためのアイデア

「私のために人が」ローからハイに算出タイプ、最大MAXPATH MAXPATH各点は、その左右上下の点+ 1未満です。

新しい配列に格納されたポイントを並べ替え、並べ替えを実装する方法、ソート機能を使用することを確認します。

ソート機能に精通していないので、参照はレッスンとみなさ誰か他の人のコード、この質問骨までに行われています。

ACコード

書式#include <iostreamの> 
の#include <アルゴリズム> 
書式#include <CStringの>
 使用して 名前空間はstdを、

int型のマップ[ 105 ] [ 105 ]。// 存储高度
INT MAXPATH [ 105 ] [ 105 ]。
INT DIR [ 4 ] [ 2 ] = {{ 10 }、{ 01 }、{ - 10 }、{ 0、 - 1 }}。

構造体ノード
{ 
    int型のX;
    int型Y;
     INT H;
     BOOLの 演算子 <(CONSTノード&F)CONSTを
    { 
        戻り H < FH; 
    } 
} -N- [ 10100 ]; 

int型のmain(){
     int型のR&LT、Cと、
     int型 CNT = 0 ; // N- []角の標準
    INT ANS = 1。; 
    CIN >> R&LT >> C;
     のためのINT I = 1 ; I <= R&LT; Iは++)// 角のうちゼロ番目の行及び空気の0列均一
    {
         ためINT= J 1、J <= C; J ++ 
        { 
            CIN >> マップ[I]、[J]; 
            MAXPATH [I] [J] = 1 ; //は1に初期化する。 
            N- [CNT] .X = I; 
            N- [CNT ] .Y = J; 
            [CNT] N-・H =マップ[I]、[J]; // 、データノードを読み取るソートするための準備 
            ++ CNTを; 
        } 
    } 
    ソート(N、N- + CNT)
     のためのint型 I = 0 ; I <CNT; I ++)// すべての点を介してローからハイに
    {
         int型 X =N- [I] .X;
         INT Y = N- [I] .Y;
         のためのINT J = 0 ; J < 4。、J ++)// 垂直方向と水平方向の四方
        {
             int型 XX = X + DIR [J] [ 0 ] ;
             INT YY = Y + DIR [J] [ 1 ];
             IF(XX> = 1 && XX <= R&LT && YY> = 1 && YY <= C &&マップ[X] [Y]>マップ[XX] [YY ])// 点(x、y)、その更新するの経過毎
            { 
                MAXPATH [X] [Y] = MAX(MAXPATH [X] [Yを、MAXPATH [XX] [YY] + 1 ); 
                ANS= MAX(ANS、MAXPATH [X] [Y])。
            } 
        } 
    } 
    COUT << ANS << ENDL。
    // システム(「休止」)。
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/yun-an/p/10964069.html