最長上公升子串行(動規)

2022-09-20 11:33:09 字數 1224 閱讀 5482

後面就根據之前學的動態規劃的步驟往下走:

1.尋找子問題:

其實就是前n個元素的最長子序列可能有多個序列有x個最長上公升子串行,但是不是每乙個序列的最後乙個數都是比n+1個數下,所以會受到影響。

接下來換乙個子問題的形式:

2,確定狀態:

3,確定狀態轉移方程:

解釋一下:其實就是第k個數最大上公升子串行的長度你可以遍歷一下從1一直到k的數,看看如果第k個數更大的話,就在對應的maxlen的基礎上加上1,因為從左到右遍歷,所以這個數隻會一直變大,直到找到最大的位置,但是我也在想,會不會有可能使得這個變小呢?我覺得應該不會,一直往右邊走應該是會一直變大的。如果找不到相應的i的話,那就說明ak左邊的數都是大於ak的所以這個位置就是乙個最大上公升子串行的開頭。

#include #include 

#include

using

namesapce std;

const

int max = 1010

;int

a[max];

intmaxlen[max];

intmain()

for(int i = 2;i<=n;++i)}}

cout

<

);//這個函式是stl庫裡面的乙個函式,這個可以求出maxlen陣列裡面的最大值。

return0;

}

其實現在綜合兩題來看還是有很大的共同性的。都是會另外搞乙個陣列來儲存子問題的解。然後狀態轉移方程的思路也差不多。還有乙個要注意的點就是迴圈的範圍選擇了。其實找到規律和解題步驟也不是非常難。

最長上公升子串行 動態規劃 最長上公升子串行LIS

問題描述 最長上公升子串行 lis 給定長度為n的序列,從中選中乙個子串行,這個子串行需要單調遞增,請問最長子序列 lis 的長度?eg 1,5,2,3,11,7,9 則lis序列為 1,2,3,7,9 長度為5 設計狀態 記f x 為以a x 為結尾的lis長度,那麼lis max 那麼如何推到f...

最長上公升子串行 (動態規劃)

描述乙個數的序列 bi,當 b1 b2 bs的時候,我們稱這個序列是上公升的。對於給定的乙個序列 a1,a2,an 我們可以得到一些上公升的子串行 ai1,ai2,aik 這裡1 i1 i2 ik n。比如,對於序列 1,7,3,5,9,4,8 有它的一些上公升子串行,如 1,7 3,4,8 等等。...

最長上公升子串行(動態規劃)

描述 乙個數的序列bi,當b1 b2 bs的時候,我們稱這個序列是上公升的。對於給定的乙個序列 a1,a2,an 我們可以得到一些上公升的子串行 ai1,ai2,aik 這裡1 i1 i2 ik n。比如,對於序列 1,7,3,5,9,4,8 有它的一些上公升子串行,如 1,7 3,4,8 等等。這...