動態規劃2 最長上公升序列 LIS

2021-08-18 07:47:46 字數 746 閱讀 8387

在原序列取任意多項,不改變他們在原來數列的先後次序,得到的序列稱為原序列的子串行。最長上公升子串行,就是給定序列的乙個最長的、數值從低到高排列的子串行,最長子序列不一定是唯一的。例如,序列2,1,5,3,6,4,6,3的最長上公升子串行為1,3,4,6和2,3,4,6,長度均為4 。

先確定動態規劃的狀態,這個問題可以用序列某一項作為結尾來作為乙個狀態。用 表示一定以第 項為結尾的最長上公升子串行。用a[i]表示第i項的值,如果有j< i且a[j]< a[i],那麼把第i項接在第i項後面構成的子串行長度為:

dp[i]=dp[j]+1

要使dp[i]為到i為止的這個序列的lis(注意可能這個序列壓根就不包含i)需要列舉所有滿足條件的j。所以轉移方程是:

dp[i]=max(dp[i],dp[j]+1)

模板

#include 

#include

#include

using

namespace

std;

int h[10000];

int dp[10000];

int main()

for(int i=1;i<=n;i++)

ans=max(dp[i],ans);

}cout

0; }

動態規劃 最長上公升子串行 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

一.簡單推論 非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長度,那...