合計時間制限: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 ] = {{ 1、0 }、{ 0、1 }、{ - 1、0 }、{ 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 ; }