LIS 最長上公升子串行問題 O n 2

2021-07-31 10:34:58 字數 577 閱讀 3711

繼續dping

有乙個長為n的數列 a0 a1....an-1 請求出這個序列中最長的上公升子串行的長度。

上公升子串行指的是對於任意的i其中 1<=n<=1e3

0<=ai<=1e6

這裡給出的 n^2的演算法 不過有更快的 先把這個弄懂了再研究nlogn的~

這裡的dp[i]表示 前i+1個個數的最長上公升子串行。

也就是以ai 為末尾的最長上公升子串行長度。

一開始忘掉了 一種就是只包括它本身的1個數

比如  1 1 1 1 1 這樣是 1

所以需要初始化一下

得到的動態轉移方程式

dp[i]=max 其中j=i的話就不對了 因為這裡的dp定義所限制)

而且要 aj

#include#include#includeusing namespace std;

const int maxn=1000+5;

int dp[maxn];

int a[maxn];

int n;

void solve()

{ int res=0;

for(int i=0;i

最長上公升子串行(LIS)問題

問題描述 給定乙個序列 a1,a2,an 求它的乙個子串行 ak1,ak2,aki 不一定連續 使得該子串行滿足ak1 ak2 akn且長度最長,如序列 1,7,3,5,9,4,8 的乙個lis是 1,3,5,8 遞迴表示式 作如下定義 由以上定義可得如下遞迴表示式 則原問題最優解為max int ...

最長上公升子串行問題 LIS

有乙個長為n的數列a0,a1,a n 1 請求出這個序列中最長的上公升子串行的長度。上公升子串行指的是對於任意的i限制條件 1 n 1000,0 ai 1000000 樣例輸入 n 5 a 輸出 3 a1,a2,a4構成的子串行 最長上公升子串行 lis,longest increasing sub...

最長上公升子串行LIS問題

問題描述犯懶 手動抱拳 優化前 優化是第二層迴圈用二分搜尋遍歷,自己不理解所以嘗試了一下優化前,可以直接看優化後 dp i 長度為i 1的上公升子串行末尾元素的最小值 不斷更新,dp陣列中最後存的不一定是得到的最長上公升子串行,比如說原來存的是,但是在遇到1之後dp會更新 include inclu...