繼續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...