洛谷P1020 NOIP1999 攔截飛彈

2021-09-11 02:43:59 字數 728 閱讀 5976

題意簡述:求最長不上公升子串行的長度,並求出最少有幾個不上公升子串行。

解題思路:第一問直接用dp做,有o(n^2)的也有優化後o(nlgn)的,我才用的是前者。第二問可以用乙個陣列h來記錄當前所有系統的攔截高度,每次遇到乙個新元素,在h陣列中找乙個大於 a[i] 的最小的元素,並將其更新為 h[ j ] = a[i],如果沒有則將a[i]作為新元素新增進h陣列。

**示例:

#include#includeusing namespace std;

const int maxn = 1e5+10;

int a[maxn];

int f[maxn];

int h[maxn];

void solve(int n)

} int len = 0;

for(int i = 1;i <= n;i++) len = max(len,f[i]);

int cnt = 0;

for(int j = 1;j <= n;j++)

} if(x == -1) x = cnt++;

h[x] = a[j];

} printf("%d\n%d\n",len,cnt);

}int main()

solve(cnt);

return 0;

}

P1020 NOIP1999 普及組 飛彈攔截

第一問,單個系統最多能攔截多少飛彈,求最長不公升序列即可.拿出lis的模板塗塗改改.bool cmp const int a,const int b for int i 1 i n i if s i dp len len dp len s i else printf d n len 第二問,最少需要...

洛谷1020攔截飛彈(NOIP1999)

洛谷1020攔截飛彈 noip1999 題目描述 某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到敵國的飛彈來襲。由於該系統還在試用階段,所以只有一套系統,因此有可能不...

洛谷1020 NOIP1999 飛彈攔截 dp

我這裡講的是nlogn的做法。首先看第一問,第一問就是要求乙個最長不下降子串行,這個o n 2 的做法是很容易的。我這裡介紹的nlogn的方法是用線段樹的。我們發現高度是不超過50000的,所以我們可以把線段樹的每乙個下標i的含義變為目前加進來的高度為i的最長不下降子串行的長度是多少。然後我們需要做...