ドミノゲーム
説明
最近、私の美しい娘幽はドミノと呼ばれるゲームをプレイするにふけます。ゲームが始まると、私は最初の長い行の高さを変えることで、いくつかのブロックを配置します。私は彼女がそれらの1つだけ選択し、左または右のいずれかを落下し、それを倒すことができることを彼女に告げました。落下ブロックが別のものをヒットした場合、それは(落下ブロックの上部がちょうど別の1の底部に接触した場合、そのブロックが静止のまま)、それはあまりにも倒れてしまいます。幽は彼女ができるだけ多くのブロックをひっくり返すたいほどgreadyです。さて、あなたのタスクは、プログラムを書いて、彼女は倒すことができたブロックの最大数を見つけるために、幽を支援することです。
エントリー
複数のテストケースがあります。各テストケースは、ブロックの数を示す整数nで始まります。
次の行は、整数のN(1 <= N <= 10000)対を含みます。各対は、XHは、高さhのブロックの位置xを示し(x> = 0、H> 0を、すべての数値は32767より大きくないであろう)。
あなたは、できるだけ多くのブロックをひっくり返すように、最初は(どのような方向に)以上のノックするブロックを選択するために、幽を助けなければなりません。
入力は、ライン上の整数0で終了します。
輸出
各入力テストケースのために、出力上ノックすることができるブロックの最大数を示す整数mを含む行。
サンプル入力
2
0 1 2 3 3
3
1 2 2 3 3 2
0
サンプル出力
1
3
//単語を横切って押さ113155ではないが、11 55ダウン31がSO 3であるべきで生じ得ます
だから、長いブランドは、それがプッシュし、抗2配列の影響を避けるようにプッシュされたために、高さ=最大(高さマイナス現在のライセンスへの元フロントナンバープレート)、(ブランドの今高さが)今あるとして。
#include <ビット/ STDC ++ H> 使用して 名前空間STDを、 構造体jilu { int型のx、H。 }ノード[ 10001 ]、ノード1 [ 10001 ]。 BOOL CMP(jilu A、jilu b)は { 戻り AX < BX。 } int型のmain() { のstd :: IOS :: sync_with_stdio(偽)。 int型のn; 一方、(CIN >> N) { 場合(N == 0)ブレーク。 int型 MAX1 = 1 ; 以下のための(int型 I = 0 iが++; iがN < ) { CIN >>ノード[i]は.X >> ・H [i]のノード。 ノード1 [i]は.X = ノード[I] .X。 ノード1 [I]・H = ノード[I]・H。 } ソート(ノード、ノード + nは、CMP)。 ソート(ノード1、ノード1 + N、CMP)。 int型の合計= 1 ; 以下のために(int型 i = 1 ; iがn <; iは++ ) { 場合(ノード[I] .Xノード[I- 1 ] .X <ノード[I- 1 ]・H) { 合計 ++; ノード[I]・H = MAX(ノード[I- 1 ] .h-(ノード[I] .Xノード[I- 1 ] .X)、ノード[I]・H); } 他 和 = 1 。 もし(合計> MAX1) MAX1 = 和。 } 和 = 1 。 用(int型 I = N- 1、I> 0 ; i-- ) { 場合([1-ノード1 [I] .X-ノード1 1 ] .X < [I]・Hノード1) { 合計 ++ 。 ノード1 [I - 1 ]・H = MAX(ノード1 [I] .h-(ノード1 [I] .X-ノード1 [I- 1 ] .X)、ノード1 [I- 1 ]・H)。 } 他 和 = 1 。 もし(合計> MAX1) MAX1 = 和。 } COUT << MAX1 << ENDL。 } }