最長不下降子串行(LIS)問題解題思路

2022-09-18 18:39:12 字數 581 閱讀 2754

要解決這個問題,我們就得明白這個問題用什麼思路來解決,無非就是乙個乙個判斷是否符合標準。主要就是這乙個動態轉移方程式:

a[i]>=a[j]&&(dp[j]+1>dp[i])

在判斷後,如果是,則將其設定為之前的數加一:

dp[i]=dp[j]+1;

在每次子迴圈後,將最大數設為答案:

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

接下來,整個程式就簡單了,再在前面加上資料輸入,後面加上輸出就完事了,上**:

1 #include2

using

namespace

std;

3int a[1000];4

int dp[1000];5

intmain()int ans=0;//

初始化11

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

17 }ans=max(ans,dp[i]);//

將最大數設為答案

18 }cout列印19

return0;

20 }

最長不下降子串行LIS

最長上公升子串行問題是解決很多問題的根本,它能幫助你理解二分的思想。考慮一下 對於乙個序列 n nn 請你查詢n nn中最長的子串行a aa,使得任意 i i j 時 a i a i a i a i a i a i 例如乙個長度為5 55的n nn 5553 331112 22444 顯然,它的最長...

LIS最長不下降子串行

在乙個序列中找到乙個最長的子串行 可以不連續 使得這個子串行不下降,即非遞減的。核心部分找到狀態轉移方程 dp i max j 1,2,i 1 a j 附上我的 include include includeusing namespace std const int maxn 10010 int d...

最長不下降子串行 (LIS)

最長不下降子串行是這樣乙個問題 在乙個數字序列中,找到乙個最長的子串行 可以不連續 使得這個子串行是不下降 非遞減 的。令dp i 表示以a i 結尾的最長不下降子串行的長度,這樣對a i 來說就會有兩種情況。1 如果存在a i 之前的元素a j jdp i 2 它前面的元素均比它大,則dp i 1...