一.簡單推論(非0 n情況)
二.嚴謹推論
最長上公升子串行(lis):設計狀態dp[x]為以a[x]結尾的lis長度,那麼整體的lis長度就為dp陣列的最大值。給定長度為n的序列,從中選取乙個子串行,這個子串行需要單調遞增
問最長上公升子串行(lis)的長度
eg:1,5,2,3,11,7,9
則lis序列為:1,2,3,7,9,長度為5
以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 ...