乙個數的序列ai,當a17
1 7 3 5 9 4 8
輸出樣例
1.求子問題求序列的前n個元素的最長上公升子串行的長度是個子問題,但是這樣分解子問題,不具有無後效性
假設f(n)=x,但可能有多個序列滿足f(n)=x。有的序列最後乙個元素比an+1小,則加上n+1就能形成更長的上公升子串行,有的序列最後乙個元素不比an+1小…以後的事情受如何達到狀態n的思想,不符合無後效性
求以ak(k=1,2,3,…n)為終點的最長上公升子串行的長度
乙個上公升子串行中最右邊的那個數,稱為該子串行的重點
雖然這個子問題和原問題形式上並不完全一樣,但是只要這個n個子問題都解決了,那麼這n個子問題的解中,最大的那個就是整個問題的解。
2.確定狀態
子問題只和乙個變數—數字的位置相關,因此序列中位置k就是狀態,而狀態k對應的值,就是以ak作為終點的最長上公升子串行的長度
狀態一共有n個
3.找出狀態轉移方程
maxlen(k)表示以ak作為終點的最長上公升子串行的長度,那麼
初始狀態maxlen(1)=1
maxlen(k)=max
//從每個元素開始遍歷,計算其最長上公升子串行的長度
for(
int i=
1;i}//找出整個陣列中最長的那個上公升子串行
int maxl=maxlen[0]
;for
(int i=
0;ireturn maxl;
}int
main()
cout<<
ascendlist
(a,n)
;return0;
}
動態規劃之最長公共子串行演算法
動態規劃之最長公共子串行演算法 演算法思想 假設x x1,x2,xm y static void init xy void getchar for i 1 i n i getchar static void lcs length void else if c i 1 j c i j 1 else p...
動態規劃之最長公共子串行 最長公共子串
題目 如果字串1的所有字元按其在字串中的順序出現在另外乙個字串2中,則字串1稱之為字串2的子串行。注意,並不要求子子串行 字串1 的字元必須連續出現在字串2中。請編寫乙個函式,輸入兩個字串,求它們的最長公共子串,並列印出最長公共子串行。例如 輸入兩個字串bdcaba和abcbdab,字串bcba和b...
動態規劃之最長公共子串行
最長公共子串行簡介 舉例說明並分析 塊測試結果 乙個給定序列的子串行是在該序列中刪去若干元素後得到的序列,確切的說,若給定序列x 則另一串行z x的子串行是指存在乙個嚴格的下標序列,使得對於所有的j 0,1,k 1有zj xij。例如序列z 是序列x 的子串行,相應的遞增下標序列維。最長公共子串行問...