2000 最長公共子上公升序列

2021-09-30 14:27:39 字數 1089 閱讀 1980

檢視

提交 統計

提問 總時間限制:

10000ms

記憶體限制:

65536kb

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

當以下條件滿足的時候,我們將長度為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

/*

最長上公升公共子串行

f(i1,i2)表示a1與a2[0..i2],以a1[i1]結尾的最長上公升公共子串行

若a2[i2]==a1[i1],

f(i1,i2)=max+1 (0<=ia1[i1],f(i1,i2)不變,

max的值更新

*/#include

#include

using

namespace

std;

const

int maxn=510;

int m1,m2,a1[maxn],a2[maxn];

struct nodeans[maxn],cur;

int main()}}

int p=0;

for(int i=1;iif(ans[p].lenprintf("%d\n",ans[p].len);

if(ans[p].iv.size())

printf("\n");

return

0;}

最長公共子串行 最長上公升子串行 最長公共上公升子串行

核心 for int i 1 ifor int j 1 jif a i b j else hdu5248 樹狀陣列優化 nl ogn nlo gn include using namespace std const int maxn 100005 char a maxn int len int bi...

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

描述 給定兩個整數序列,寫乙個程式求它們的最長上公升公共子串行。當以下條件滿足的時候,我們將長度為n的序列s1 s2 sn 稱為長度為m的序列a1 a2 am 的上公升子串行 存在 1 i1 i2 in m 使得對所有 1 j n,均有sj aij,且對於所有的1 j n,均有sj sj 1。輸入每...

最長上公升子串行 最長公共上公升子串行

求最長公共子串行有幾種方法 include include using namespace std include include const int inf 0x3f3f3f3f const int maxn 10005 int a maxn ints maxn int dp maxn int d...