1077 NOIP2010衝刺六 數列遊戲

2022-08-03 20:06:21 字數 1185 閱讀 8873

【題目描述】

小m很喜歡找點遊戲自娛自樂。有一天,她在紙上寫了一串數字:1,1,2,5,4。接著她擦掉了乙個1,結果發現剩下1,2,4都在自己所在的位置上,即1在第1位,2在第2位,4在第4位。她希望擦掉某些數後,剩下的數列中在自己位置上的數盡量多。她發現這個遊戲很好玩,於是開始樂此不疲地玩起來……不過她不能確定最多能有多少個數在自己的位置上,所以找到你,請你幫忙計算一下!

第一行為乙個數n,表示數列的長度。

接下來一行為n個用空格隔開的正整數,第i行表示數ai。

一行乙個整數,表示擦掉某些數後,最後剩下的數列中最多能有多少個數在自己的位置上,即ai=i最多能有多少。

1 1 2 5 4

對於20%的資料,n≤20;

對於60%的資料,n≤100;

對於100%的資料,n≤l000

1 #include2 #include345

using

namespace

std;67

8int

main()9;

13int dp[1010]=;

14int n;int

max;

15 cin>>n;

16int

i,j;

17for(i=1;i<=n;i++)

18 cin>>ac[i];

19for(i=1;i<=n;i++)

2026 max=0;27

for(j=0;j)

28if(ac[i]>ac[j])

29if((ac[i]-ac[j])<=(i-j))

3033 dp[i]=max+1;34

}35 max=0;36

for(i=1;i<=n;i++)

37if(dp[i]>max)max=dp[i];

38 cout

39return0;

40 }

view code

**分析:

其實該題就是求最長遞增子串行;只不過是加了一些附加的條件;

首先,應該是該元素的值應該大於等於該元素的下標;否則不行,即賦值為0;

其次,元素之差要小於等於下標之差;

在上邊這些條件下找出dp陣列中第i個元素前的最大值加1賦給dp[i];

最後在dp陣列中尋找最大值然後輸出;

NOIP2010衝刺十三 逃離遺跡

根據外星人的回信,在遺跡分布著三樣道具。當三樣道具都拿走後,遺跡就很快自動毀滅,所以必須要在最短時間內離開。遺跡可以看作是由n個房間 編號1.n 和n l條長度不等通道所組成,並且任意兩個房間之間有且只有一條路可以相互到達。現在我們的隊員已經在編號為a,b,c的房間內拿到道具,並且準備撤退。由於只有...

找位置 衝刺 noip

找位置 測試區 題目 farmer john 想找乙個最好的位置來建新農場,這樣他每天可以少走些路。fj 所在的區域,有n 個城鎮 1 n 10,000 城鎮之間,有m 1 m 50,000 條雙向路相連。所有城鎮都可以借助一些路相互連線。fj 需要你的幫助來選擇最合適建新農場的城鎮。k 1 k 5...

noip衝刺賽 迴圈整數

問題描述 mored 在學習完迴圈小數之後發現迴圈是個很美好的性質。自己只需要記住短短的迴圈 節以及迴圈次數 次數大於 1,且是整數 就可以記住整個數字了。因為背誦數字變得方便了,mored 決定背誦 l,r 內的所有迴圈的整數。mored 的背誦 計畫有 t 天,但是他不知道每天具體要背多少個數,...