まず、この質問は、最長の上昇シーケンスDP 80点を模倣するために使用することができ、我々は正の解を作成する方法を検討しなければなりません。問題の意味波状模様のように多くの花を選択するように低減することができ、その後、私たちは私を検討するには、すべてのピークの上に、場合に可能な最大の一番上の最適な事情を選択し、フォローアップには影響を与えません。谷では、フォローアップには影響しない場合には、状況にも最高を選択する必要があり、できるだけ小さいです。大/小ので、我々は選択肢がさらに大きくなるに従ってください。だから我々は貪欲することができます。
1の#include <cstdioを> 2の#include <アルゴリズム> 3 使用して 名前空間STDを、 4 int型N、ANS1、ANS2。 5 int型 VEC [ 200000 ]。 6 ブールトップ。 7 INT メイン() 8 { 9 のscanf(" %d個"、&N) 10 のために(int型 i = 1 ; iが<= N iが++ ) 11 のscanf(" %dの"、&VEC [I])。 12 ANS1 =1 ; 13 のために(int型、I = 2 ; iが<= N; iが++ ) 14 { 15を 場合(!上部) 16 { 17 であれば(VEC [I]> VEC [I - 1 ]) 18 { 19 ANS1 ++ 。 20 トップ= 真。 21 } 22 } 他の 23 { 24 であれば(VEC [i]が<VEC [I - 1 ]) 25 { 26 ANS1 ++ ; 27 トップ= 偽; 28 } 29 } 30 } 31 トップ= 真。 32 ANS2 = 1 。 33 のためには、(int型、I = 2 ; iが<= N; iが++ ) 34 { 35を 場合(!上部) 36 { 37 であれば(VEC [I]> VEC [I - 1 ]) 38 { 39 ANS2 ++; 40 トップ= 真; 41 } 42 } 他の 43 { 44 であれば(VEC [I] <VEC [I - 1 ]) 45 { 46 ANS2 ++ 。 47 トップ= 偽; 48 } 49 } 50 } 51 52 のprintf(" %d個の\ n " 、MAX(ANS1、ANS2))。 53 リターン 0 ; 54 }