C NOIP模擬題 列車排程

2021-08-01 01:21:08 字數 1217 閱讀 2094

161114-練習-day1-ahsdfz t2

有 n 輛列車,標記為 1,2,3,…,n。它們按照一定的次序進站,站台共有 k 個軌道,軌道遵從先進先出的原則。列車進入站台內的軌道後可以等待任意時間後出站,且所有列車不可後退。現在要使出站的順序變為 n,n-1,n-2,…,1,詢問 k 的最小值是多少。

例如上圖中進站的順序為 1,3,2,4,8,6,9,5,7,則出站的順序變為 9,8,7,6,5,4,3,2,1。

輸入共 2 行。

第 1 行包含 1 個正整數 n ,表示 n 輛列車。

第 2 行包含 n 個正整數,為 1 至 n 的乙個排列,表示進站次序。

輸出共 1 行,包含 1 個整數,表示站台內軌道數 k 的最小值。

輸入

1 2 3

輸出

3
輸入

1 3 2 4 8 6 9 5 7

輸出

5
【資料規模與約定】

對於 30% 的資料,n≤10;

對於 70% 的資料,n≤2000;

對於 100% 的資料,n≤100000。

30分做法: 

直接搜尋每一輛列車進入哪一條軌道。剪枝1:若當前列車進入空軌道,選

擇任意乙個空軌道的結果是一樣的。剪枝2:每一條軌道進入的列車的標號必須

單調下降。 

70分做法: 

實際上就是求這個序列的最長上公升子串行的長度。 

簡略證明: 

假設最長上公升子串行長度為k』,則其中任意兩輛不會進入同乙個軌道,

因此k≥k』。至於k=k』可由數學歸納法詳細證明。 

用o(n²)的dp方法求最長上公升子串行。 

100分做法: 

用二分法或樹狀陣列(線段樹)優化dp,時間複雜度o(nlogn)。 

另:直接分析搜尋過程, 可以得到o(n²)的構造方法, 加上乙個二分就可以滿分。

(略) 

#include#includeinline int readint()

int main()

if( c==true ) k[++tot]=a[i];

} system.out.println(tot);

}}

C NOIP模擬題 動態分班

某中學對班級實行動態管理,每學年結束後都要重新分配班級,但這所學校重新分配的方法和石室中學完全不同。現在給出一些屬於同一年級學生的連續編號,它們都是從 a 到 b 的整數。一開始每個編號都屬於各自不同的班 即乙個班只有乙個學生 然後學校將進行以下的調整 每次選擇兩個屬於不同班的編號,如果這兩個編號擁...

C NOIP模擬題 裝果子

果園裡有 n 顆果樹,每棵果樹都有乙個編號 i 1 i n 小明已經把每棵果樹上的果子都摘下來堆在了這棵樹的下方,每棵樹下方的果子體積為 ai。現在小明將拿來 m 個袋子把這些果子都裝進袋子裡。每個袋子的體積為 v 小明會按照如下規則把果子裝進袋子裡 a 從第 1 棵果樹開始裝起,由 1 到 n 一...

C NOIP模擬題 間諜網路

由於外國間諜的大量滲入,正處於高度危機之中。如果a間諜手中掌握著關於b間諜的犯罪證據,則稱a可以揭發b。有些間諜接 賂,只要給他們一定數量的美元,他們就願意交出手中掌握的全部情報。所以,如果我們能夠收買一些間諜的話,我們就可能控制間諜網中的每一分子。因為一旦我們逮捕了乙個間諜,他手中掌握的情報都將歸...