nyoj 214 單調遞增子串行 二

2021-08-19 21:19:00 字數 665 閱讀 2347

記憶體限制:64mb

時間限制:1000ms

special judge: no

accepted:3

submit:16

給定一整型數列(0

如:1 9 10 5 11 2 13的最長單調遞增子串行是1 9 10 11 13,長度為5。

有多組測試資料(<=7)

每組測試資料的第一行是乙個整數n表示序列中共有n個整數,隨後的下一行裡有n個整數,表示數列中的所有元素.每個整形數中間用空格間隔開(0對於每組測試資料輸出整形數列的最長遞增子串行的長度,每個輸出佔一行。

複製

7

1 9 10 5 11 2 13

22 -1

5

1

題解:普通的單調遞增子串行演算法會超時。這裡我們換一種想法,顯然如果子串行的長度相同,那麼最末位的元素較小的在之後會更加有優勢。所以我這裡的dp[i]表示長度為i+1的上公升子串行中末尾元素最小,不存在的用inf表示。

#include using namespace std;

const int inf=0x3f3f3f3f,maxx=100001;

int a[maxx];

int dp[maxx];

int main ()

cout<

NYOJ 214 單調遞增子串行 二

先開設乙個陣列dp 然後從第乙個數開始列舉,和dp 陣列中的最後乙個元素end 進行比較,如果大於end 直接把這個數接到end 的後面,並且把end 更新為列舉的這個數。如果不大於edn 在dp 陣列中找到第乙個大於這個數的位子 k,並用這個數 替換掉dp k 例如 x 5,dp 則列舉過x 之後...

NYOJ 214 單調遞增子串行 二

單調遞增子串行 二 時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 給定一整型數列 0如 1 9 10 5 11 2 13的最長單調遞增子串行是1 9 10 11 13,長度為5。輸入 有多組測試資料 7 每組測試資料的第一行是乙個整數n表示序列中共有n個整數,隨後的下一行裡...

nyoj 214 單調遞增子串行 二

時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 給定一整型數列 0 如 1 9 10 5 11 2 13的最長單調遞增子串行是1 9 10 11 13,長度為5。輸入 有多組測試資料 7 每組測試資料的第一行是乙個整數n表示序列中共有n個整數,隨後的下一行裡有n個整數,表示數...