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

2021-10-17 00:25:34 字數 1990 閱讀 1085

一.簡單推論(非0 n情況)

二.嚴謹推論

最長上公升子串行(lis):

給定長度為n的序列,從中選取乙個子串行,這個子串行需要單調遞增

問最長上公升子串行(lis)的長度

eg:1,5,2,3,11,7,9

則lis序列為:1,2,3,7,9,長度為5

設計狀態dp[x]為以a[x]結尾的lis長度,那麼整體的lis長度就為dp陣列的最大值。

以eg為例:

a[n]為序列陣列,dp[n]為lis陣列。

dp[1]=以a[1],即以1結尾的lis長度,即為1;

dp[2]=以a[2],即以5結尾的lis長度,即為2;

dp[3]=以a[3],即以2結尾的lis長度,這裡我們注意到,2小於5,所以的lis長度=2,也就是dp[2],所以在a[3]a[3]的情況下dp[4]=dp[3]+1;

dp[5]=以a[5],即以11結尾的lis長度,這裡我們注意到,11大於3,所以的lis長度=4,也就是dp[4]+1,所以在a[5]>a[4]的情況下dp[5]=dp[4]+1;

dp[6]=以a[6],即以7結尾的lis長度,這裡我們注意到,7小於11,所以的lis長度=4,也就是dp[5],所以在a[6]a[6]的情況下dp[7]=dp[6]+1;

根據以上推導,我們就得到了dp陣列,dp陣列的最大值5即我們所求的a陣列的lis長度。

設計狀態dp[x]為以a[x]結尾的lis長度,那麼整體的lis長度就為dp陣列的最大值。在求dp[x]的時候考慮比a[x]小的每乙個a[i]的dp[i]+1。

以eg為例:

a[n]為序列陣列,dp[n]為lis陣列。

dp[1]=以a[1],即以1結尾的lis長度,即為1;

dp[2]=以a[2],即以5結尾的lis長度,即為2;

dp[3]=以a[3],即以2結尾的lis長度,這裡我們注意到,2小於5,2大於1,所以的lis長度=2,也就是dp[1]+1,所以在a[2]>a[1]的情況下dp[3]=dp[1]+1;

dp[4]=以a[4],即以3結尾的lis長度,這裡我們注意到,3大於2,3大於1,所以的lis長度=3,也就是max(dp[1],dp[2])+1,所以在a[4]>a[3],a[4]>a[1]的情況下dp[4]=max(dp[1],dp[2])+1;

dp[5]=以a[5],即以11結尾的lis長度,這裡我們注意到,11大於3,11大於2,11大於5,11大於1,所以的lis長度=4,也就是max+1,所以在a[5]>a[4],a[5]>a[3],a[5]>a[2],a[5]>a[1]的情況下dp[5]=max+1;

同理推導。。。。。。

根據以上推導,我們就得到了dp陣列,dp陣列的最大值5即我們所求的a陣列的lis長度。

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

最長上公升子串行 簡稱lis 1.問題描述 給出乙個序列a1,a2,a3,a4,a5,a6,a7.an,求它的乙個子串行 設為s1,s2,sn 使得這個子串行滿足這樣的性質,s1 dp i 以ai結尾 的最長上公升子串行 狀態轉移方程 dp i max 1 實現o n n 2 dp i max 1 ...

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

題目 好多好多球 描述一天,jason買了許多的小球。有n個那麼多。他寫完了作業之後就對著這些球發呆,這時候鄰居家的小朋友ion回來了,jason無聊之際想到了乙個遊戲。他把這n個小球從1到n進行標號。然後打亂順序,排成一排。然後讓ion進行一種操作 每次可以任意選擇乙個球,將其放到佇列的最前端或者...

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

acwing 895.最長上公升子串行 這是一道典型的dp例題,dp的兩個重要元素 狀態表示和狀態計算。其中維度的選擇是很關鍵的,要求既能夠表示出轉移過程中的狀態,而且能夠計算出結果,在此基礎上,要求維度盡可能小。我們這裡可以用dp i 來表示以第i個數結尾的數值上公升的子串行的集合,屬性是max ...