動態規劃 最長遞增子串行LIS

2021-07-04 20:39:54 字數 680 閱讀 2663

問題:乙個序列有n個數:a[1],a[2],…,a[n],求出最長非降子串行的長度

樣例輸入:3 1 2 6 5 4

思路: 首先把問題簡單化。可以先求a[1],...a[i]的最長非降子串行,令dp[i]為以a[i]結尾的最長非降子串行。當i = 1 時, 明顯是長度dp[1] = 1 ; i = 2 時,前面沒有比1小的數字,故dp[2]=1 , 此時的最長非降子串行為1 ; i = 3 時,比數字2小的數是1 ,並且只有1 , 分析可知 dp[3] = dp[2]+1;當i = 4 時,找到比數字6小的數有 3 1 2 ,求最長子序列,就應該找到前面的最長子序列的最大值 max,此時dp[4]=max ,(j<4 , a[j]下面是**:

/*

最長非降子串行

2023年8月26日10:19:00

動態規劃

*/#includeusing namespace std ;

int lis (int a , int n );

int main () ;

cout << lis (a,6);

return 0;

}int lis (int a , int n )

} delete dp ;

return len ;

}

僅作個人理解,希望對沒有基礎的人有幫助

動態規劃 最長遞增子串行 LIS

最長遞增子串行是動態規劃中經典的問題,詳細如下 在乙個已知的序列中,取出若干陣列組成新的序列,其中下標i1,i2,im保持遞增,即新數列中的各個數之間依舊保持原數列中的先後順序,那麼我們稱新的序列為原序列的乙個子串行。若在子串行中,當下標ix iy時,aix aiy,那麼我們稱這個子串行為原序列的乙...

動態規劃之最長遞增子串行LIS

子串行 乙個序列 s 任意刪除若干項,剩餘的序列叫做s的乙個子串行。也可以認為是從序列s按原順序保留任意若干項得到的序列。現在我們要求解乙個陣列裡最長遞增子串行的長度。在此我提出兩種方法,並且附上 解決方法 1 利用動態規劃求解兩個陣列的最長哦公共子串行來求解這種題目,但只適用於求解最長遞增子串行的...

動態規劃 最長遞增子串行問題 LIS

題目 輸出最長遞增子串行的長度,如輸入 4 2 3 1 5 6,輸出 4 因為 2 3 5 6組成了最長遞增子串行 暴力破解法 這種方法很簡單,兩層for迴圈搞定,時間複雜度是o n2 動態規劃 之前我們使用動態規劃去解決一般是建立一維陣列或者二維陣列來構建出dp表,利用之前的歷史上dp表中的值進行...