軍隊では、小隊は、n兵士によって構成されています。朝の検査の際、兵士たちは船長の前に一直線に並んでいます。船長は彼の兵士が整列されている方法に満足していません。、1、2、3:兵士が彼らのコード番号順に並んでいることは事実です。。。、nは、しかし、彼らは、その高さで整列されていません。船長は、各兵士の少なくとも1行縦に見ることによって見ることができる新しいラインを形成するために、その場所を変更することが、近づいてなくて、ラインに残っている兵士として、ラインから抜け出すために、いくつかの兵士を尋ねますラインの四肢(左または右)。彼とその先端の間に彼の高さ以上と高さのいずれかの兵士がない場合、兵士が四肢を参照してください。
各兵士の高さを知って、プログラムを書く、ラインの外に取得する必要が兵士の最小数を決定します。
各兵士の高さを知って、プログラムを書く、ラインの外に取得する必要が兵士の最小数を決定します。
入力
入力の最初の行にN兵士の数を書き込まれます。二行目に最大で5桁の精度でNフローティング一連の数字を書き込まれ、空白文字で区切られました。このラインからk番目の数は、コードK(1 <= K <= N)を有している兵士の高さを表しています。
いくつかの制限があります2 <= N <= 1000の高さは、間隔からフローティング番号は[0.5、2.5]
いくつかの制限があります2 <= N <= 1000の高さは、間隔からフローティング番号は[0.5、2.5]
出力
出力の唯一のラインはラインの外に取得する必要が兵士の数が含まれています。
************************************************** *********************************************
最長昇順
************************************************** **********************************************
1の#include <iostreamの> 2の#include < ストリング > 3の#include <cstdioを> 4の#include <CStringの> 5の#include <アルゴリズム> 6の#include <cmath> 7 使って 名前空間STD。 8 int型 DP1 [ 1010 ]。 9 int型 DP2 [ 1010 ]。 10 ダブル [ 1010 ]。 11 ダブル B [ 1010 ]。 12 int型N、K。 13 空のfind(ダブル C [1010 ]、INT DP [ 1010 ])// 找两次 14 { 15 INT I、J、MAX2。 16 のmemset(DP、0、はsizeof (DP))。 17 DP [ 0 ] = 1 。 18 のために(i = 1 ; iがn <; iは++ ) 19 { 20 MAX2 = 0 。 21 のための(j = 0 ; J <I、J ++ ) 22 { 23 であれば(C [i]が> C [J] && DP [J]> MAX2) 24 MAX2 = DP [J]。 25 } 26 DP [I] = MAX2 + 1 。 27 } 28 29 } 30 のint main()の 31 { 32 CIN >> N。 33 のためには、(int型 i = 0 ; iがn <I ++は) 34 { 35 のscanf(" %LFを"&[I])。 36件の B [NI- 1 ] = [I]。 37 } 38 (DP1)を見つけます。 39 検索(B、DP2)。 40 int型 MAX1 = 0 。 41 のためには、(int型 i = 0 ; iがn <I ++ ) 42 のための(INT J = I + 1、J <N; jは++ ) 43 { 44 であれば(MAX1 <DP2 [I] + DP1 [nj- 1 ]) 45 MAX1を= DP2 [I] + DP1 [nj- 1 ]。 46 } 47 COUT << N-MAX1 << ENDL。 48 リターン 0 ; 49 }
ます。https://www.cnblogs.com/sdau--codeants/p/3244546.htmlで再現