2000 最長公共子上公升序列 動態規劃

2021-10-09 09:27:26 字數 784 閱讀 3620

描述

給定兩個整數序列,寫乙個程式求它們的最長上公升公共子串行。

當以下條件滿足的時候,我們將長度為n的序列s1 , s2 , . . . , sn 稱為長度為m的序列a1 , a2 , . . . , am 的上公升子串行:

存在 1 <= i1 < i2 < . . . < in <= m ,使得對所有 1 <= j <=n,均有sj = aij,且對於所有的1 <= j < n,均有sj < sj+1。

輸入每個序列用兩行表示,第一行是長度m(1 <= m <= 500),第二行是該序列的m個整數ai (-231 <= ai < 231 )

輸出在第一行,輸出兩個序列的最長上公升公共子串行的長度l。在第二行,輸出該子串行。如果有不止乙個符合條件的子串行,則輸出任何乙個即可。

樣例輸入

5

1 4 2 5 -12

4-12 1 2 4

樣例輸出

2

1 4

思路

這是複雜度為o(n^2)的寫法。比較難理解。

**

#includeusing namespace std;

int a[505],b[505];

struct nodedp[505];

int main()

cin>>n;

for(int i=1;i<=n;i++)

for(int i=1;i<=n;i++)

} cout << maxn.val

}

2000 最長公共子上公升序列

檢視 提交 統計 提問 總時間限制 10000ms 記憶體限制 65536kb 描述 給定兩個整數序列,寫乙個程式求它們的最長上公升公共子串行。當以下條件滿足的時候,我們將長度為n的序列s1 s2 sn 稱為長度為m的序列a1 a2 am的上公升子串行 存在 1 i1 i2 in m 使得對所有 1...

最長公共上公升子串行 動態規劃解最長公共子串行問題

序列序列如果存在乙個序列其中 且在 現的先後順序要保持一致,則稱序列是序列和序列的公共子串行。要求找出序列和序列的最長的公共子串行。序列,序列。序列的子串行有 序列的子串行有 序列和的公共子串行有 所以序列和的最長公共子串行是 序列,序列。假設序列是兩個序列的最長公共子串行,則有以下推論 記為序列和...

最長公共子串行 動態規劃

經常會遇到複雜問題不能簡單地分解成幾個子問題,而會分解出一系列的子問題。簡單地採用把大問題分解成子問題,並綜合子問題的解匯出大問題的解的方法,問題求解耗時會按問題規模呈冪級數增加。為了節約重複求相同子問題的時間,引入乙個陣列,不管它們是否對最終解有用,把所有子問題的解存於該陣列中,這就是動態規劃法所...