數列
sequence.pas/c/cpp
問題描述
雖然msh長大了,但她還是很喜歡找點遊戲自娛自樂。有一天,她在紙上寫了一串數字:1,1,2,5,4。接著她擦掉了乙個1,結果發現剩下1,2,4都在自己所在的位置上,即1在第1位,2在第2位,4在第4位。她希望擦掉某些數後,剩下的數列中在自己位置上的數盡量多。她發現這個遊戲很好玩,於是開始樂此不疲地玩起來„„不過她不能確定最多能有多少個數在自己的位置上,所以找到你,請你幫忙計算一下!
輸入格式:
第一行為乙個數n,表示數列的長度。 接下來n個數,每次乙個正整數,第i個表示數ai。
輸出格式:
一行乙個整數,表示擦掉某些數後,最後剩下的數列中最多能有多少個數在自己的位置上,即ai=i最多能有多少。
樣例輸入: 5 1 1 2 5 4
樣例輸出: 3
資料範圍: 對於20%的資料,n<=20; 對於60%的資料,n<=100; 對於100%的資料,n<=1000.
分析:對於前i位,如果算上第二位可以形成對位數,顯然對於第i位之前的任意一位j有a[i]-a[j]<=i-j
所以可以得出轉移:f[i]=max
#include#include#include#include#include#include#include#include#define n 1010
using namespace std;
int n,a[n],f[n];
int main()
int ans=0;
for (int i=1;i<=n;i++) ans=max(ans,f[i]);
cout << ans<
NOIp模擬 數對
傳送門 很神的dpdp dp題。首先要確定乙個dpdp dp的順序保證答案的正確性。對於兩個元素,分四種情況討論它們的關係 如果a i bjan db i a i leqslant b j and b i a j ai bj and bi 那麼i ii必須排在j jj的前面。如果a i bj and...
NOIP模擬 數球(思維題)
小a有n個球,編號分別為1到n,小a每次都會從n個球中取出若干個球,至少取乙個,至多取n個,每次取完再放回去,需要滿足以下兩個條件。1 每次取出的球的個數兩兩不同。2 每次取出的球的集合兩兩不包含。包含是指,對於兩次取球,對於取的數目少的那次取球的所有球都出現在取的數目多的那次取球中,例如 1,2 ...
NOIP模擬 數球(思維題)
小a有n個球,編號分別為1到n,小a每次都會從n個球中取出若干個球,至少取乙個,至多取n個,每次取完再放回去,需要滿足以下兩個條件。1 每次取出的球的個數兩兩不同。2 每次取出的球的集合兩兩不包含。包含是指,對於兩次取球,對於取的數目少的那次取球的所有球都出現在取的數目多的那次取球中,例如 1,2 ...