最長上公升子串行LIS問題

2021-09-25 19:27:20 字數 1010 閱讀 9841

問題描述犯懶(手動抱拳)

優化前:

優化是第二層迴圈用二分搜尋遍歷,自己不理解所以嘗試了一下優化前,可以直接看優化後

dp[i] = 長度為i+1的上公升子串行末尾元素的最小值(不斷更新,dp陣列中最後存的不一定是得到的最長上公升子串行,比如說原來存的是,但是在遇到1之後dp會更新)

#include#include#include#include#include#include#include#include#define max 110000

#define inf 10000000

using namespace std;

int n, a[max];

int dp[max];

int ans;

//dp

void dp()

} }//找答案

for(int i=0; i> n;

for(int i=0; i> a[i];

dp();

cout << ans << endl;

in.close();

return 0;

}

優化後,二分搜尋代替迴圈

#include#include#include#include#include#include#include#include#define max 110000

#define inf 10000000

using namespace std;

int n, a[max];

int dp[max];

int ans;

//dp

void dp()

} }//找答案

for(int i=0; i> n;

for(int i=0; i> a[i];

dp();

cout << ans << endl;

in.close();

return 0;

}

最長上公升子串行(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

題目 兩道題幾乎一樣,只不過對於輸入輸出的要求有所不同罷了。lis有兩種方法 一 第一種方法 時間複雜度為o n 2 狀態 dp i 區間為0 i的序列的lis 轉移方程 dp i max 1,dp k 1 0 k include include include include using name...