單調遞增最長子序列問題(動態規劃)

2021-10-06 21:35:30 字數 773 閱讀 1191

具體描述如下

設計乙個o(n2)時間的演算法,找出由n個數組成的序列的最長單調遞增子串行。

輸入格式:

輸入有兩行: 第一行:n,代表要輸入的數列的個數 第二行:n個數,數字之間用空格格開

輸出格式:

最長單調遞增子串行的長度

輸入樣例:

在這裡給出一組輸入。例如:

51 3 5 2 9

輸出樣例:

在這裡給出相應的輸出。例如:

解析:這道題考慮用動態規劃的方法來求解,可以考慮用dp[i]表示以第i個數字結尾的最長子序列長度,那個以第i+1個結尾的最長子序列應該怎麼找呢?我們就需要從第1個數字到第i個數字遍歷一遍,把數字小於第i+1並且它的dp值最大的那個(用語言描述就是a[x]dp[i+1]),加入找到的是第x個數字,那麼dp[i+1]就是dp[x]+1。大體的思路就是醬,具體**如下

#include

using

namespace std;

intmain()

,max=

1,t;

dp[1]

=1;//第乙個數字的最優解就是1,先賦值

for(

int i=

2;i<=n;i++)}

dp[i]

=dp[i]

+t+1

;//這時更新dp[i]

if(dp[i]

>max)

max=dp[i];}

cout

}

動態規劃 單調遞增最長子序列

動態規劃 單調遞增最長子序列 時間限制 1 sec 記憶體限制 128 mb 求乙個字串的最長遞增子串行的長度 如 dabdbf最長遞增子串行就是abdf,長度為4 第一行乙個整數0輸出字串的最長遞增子串行的長度 3 aaaababc abklmncdefg 137 遞增子串行可以不是連續的。1 i...

動態規劃 單調遞增最長子序列

設計乙個o n2 時間的演算法,找出由n個數組成的序列的最長單調遞增子串行。輸入格式 輸入有兩行 第一行 n,代表要輸入的數列的個數 第二行 n個數,數字之間用空格格開 輸出格式 最長單調遞增子串行的長度 輸入樣例 5 1 3 5 2 9輸出樣例 4 定義乙個dp陣列,全部初始化為1,代表至少遞增子...

動態規劃之單調遞增最長子序列

設計乙個o n2 時間的演算法,找出由n個數組成的序列的最長單調遞增子串行。輸入有兩行 第一行 n,代表要輸入的數列的個數 第二行 n個數,數字之間用空格格開 最長單調遞增子串行的長度 在這裡給出一組輸入。例如 5 1 3 5 2 9在這裡給出相應的輸出。例如 4 include include i...