NYOJ 單調遞增最長子序列(兩種演算法)

2021-07-15 07:04:15 字數 935 閱讀 4742

時間限制:

3000 ms  |  記憶體限制:

65535 kb

難度:4 描述

求乙個字串的最長遞增子串行的長度

如:dabdbf最長遞增子串行就是abdf,長度為4

輸入第一行乙個整數0

輸出輸出字串的最長遞增子串行的長度

樣例輸入

3

aaaababc

abklmncdefg

樣例輸出

1

37

這裡採用兩種演算法:

o(n*n):(a[1]...a[n] 存的都是輸入的數)

1、對於a[n]來說,由於它是最後乙個數,所以當從a[n]開始查詢時,只存在長度為1的不下降子串行;

2、若從a[n-1]開始查詢,則存在下面的兩種可能性:

(1)若a[n-1] < a[n] 則存在長度為2的不下降子串行 a[n-1],a[n].

(2)若a[n-1] > a[n] 則存在長度為1的不下降子串行 a[n-1]或者a[n]。

3、一般若從a[t]開始,此時最長不下降子串行應該是按下列方法求出的:

在a[t+1],a[t+2],...a[n]中,找出乙個比a[t]大的且最長的不下降子串行,作為它的後繼。

4、為演算法上的需要,定義乙個陣列:

d:array [1..n,1..3] of integer;

d[t,1]表示a[t]

d[t,2]表示從i位置到達n的最長不下降子串行的長度

d[t,3]表示從i位置開始最長不下降子串行的下乙個位置

#include#include#include#include#includeusing namespace std;

int main()

printf("%d\n",ans);

}}

NYOJ 單調遞增最長子序列

今天水一道 憋打我 描述 求乙個字串的最長遞增子串行的長度 如 dabdbf最長遞增子串行就是abdf,長度為4 輸入第一行乙個整數0 輸出輸出字串的最長遞增子串行的長度 樣例輸入 3 aaaababc abklmncdefg 樣例輸出 1 37 一題簡單的dp,不說啥了。c的輸入字串真心蛋疼,用了...

NYOJ 單調遞增最長子序列

時間限制 3秒 記憶體限制 128兆 題目描述 求乙個字串的最長遞增子串行的長度 如 dabdbf最長遞增子串行就是abdf,長度為4 輸入第一行乙個整數0輸出 輸出字串的最長遞增子串行的長度 樣例輸入 3 aaaababc abklmncdefg樣例輸出 1 37 include includeu...

NYOJ 17 單調遞增最長子序列

寫了兩個版本,一直找不出第乙個程式 錯了。先放著,回頭再來繼續改 f i max 1 0 j include includeusing namespace std define n 10005 char str n int f n int main if f i max2 max2 f i prin...