最長上公升子串行
【題目描述】
給定n個數,求這n個數的最長上公升子串行的長度。
【樣例輸入】
72 5 3 4 1 7 6
【樣例輸出】
注:在網上看了不少關於最長上公升子串行的求解方法 總結能力不太好 只能舉例子了
方法一用b[i]表示以a[i]結尾的上公升子串行的長度 時間複雜度為o(n^2)
#includeusing namespace std;
void init(int * b,int n)
init(b,n);//把b陣列初始化為1 當a[i]前面的元素都比a[i]大時 b[i] = 1;
for(i=1;ia[j])
}} if(b[i]>max)
} cout<
方法二
b[len] 代表 所有長度為len的上公升子串行中最末位元素得最小值
例如2 5 3 4 1 7 6
a[1] = 2 時 b[1] = 2 目前長度為1 最小的為2 b[1] = 2
a[2] = 5 時 b[2] = 5 5>b[1] 長度+1 b[2] = 5
a[3] = 3 時 b[2] = 3 3b[2] b[2+1] = 4
a[5] = 1 時 b[1] = 1 1b[3] b[3+1] = 7
a[7] = 6 時 b[4] = 6 6using namespace std;
int find(int tmp,int * b ,int left,int right);
int main()
b[len] = a[0];
for(i=1;ib[len])
else
} coutelse if(tmp > b[mid])
else
}}
LIS 最長上公升子串行問題 O n 2
繼續dping 有乙個長為n的數列 a0 a1.an 1 請求出這個序列中最長的上公升子串行的長度。上公升子串行指的是對於任意的i其中 1 n 1e3 0 ai 1e6 這裡給出的 n 2的演算法 不過有更快的 先把這個弄懂了再研究nlogn的 這裡的dp i 表示 前i 1個個數的最長上公升子串行...
最長上公升子串行
問題描述 乙個數的序列bi,當b1 b2 bs的時候,我們稱這個序列是上公升的。對於給定的乙個序列 a1,a2,an 我們可以得到一些上公升的子串行 ai1,ai2,aik 這裡1 i1 i2 ik n。比如,對於序列 1,7,3,5,9,4,8 有它的一些上公升子串行,如 1,7 3,4,8 等等...
最長上公升子串行
最長上公升子串行問題是各類資訊學競賽中的常見題型,也常常用來做介紹動態規劃演算法的引例,筆者接下來將會對poj上出現過的這類題目做乙個總結,並介紹解決lis問題的兩個常用 演算法 n 2 和 nlogn 問題描述 給出乙個序列a1,a2,a3,a4,a5,a6,a7.an,求它的乙個子串行 設為s1...