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

2021-07-10 14:27:24 字數 1190 閱讀 3685

求最長公共子串行有幾種方法

#include

#include

using namespace std;

#include

#include

const int inf=0x3f3f3f3f;

const int maxn=10005;

int a[maxn];

ints[maxn];

int dp[maxn];

int dpx[2][maxn];

int p[maxn];

int n,m;

int finds(int

x) returns;}

int main()

memset(dp,inf,sizeof(dp));

memset(p,inf,sizeof(p));

m=0;

//最長遞增子串行求法 1 普通實現,dp

/*for(int i=0;iif(a[i]>dp[m])

else}}

printf("length=%d\n",m+1);

for(int i=0;iif(p[i]==inf)break;

else

printf("%d ",p[i]);

}cout<*/

//最長遞增子串行求法 2 利用stl,**量十分少,效率也不低

/*memset(dp,inf,sizeof(dp));

m=0;

for(int i=0;iint

pos=lower_bound(dp,dp+n,a[i])-dp;

dp[pos]=a[i];

}printf("length=%d\n",lower_bound(dp,dp+n,inf)-dp);

*///最長遞增子串行求法 3 和排序後的陣列求最長公共子串行,效率不高,但是也是一種方法啊

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

memcpy(s+1,a+1,sizeof(int)*n);

memset(dpx,0,sizeof(dpx));

sort(s+1,s+n+1);

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

else}}

}int ans=0;

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

cout0;}

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

核心 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...

最長公共上公升子串行

題目描述 給定兩個整數序列,求它們的最長上公升公共子串行。輸入描述 輸入兩組資料,每組資料代表乙個整數序列,其輸入格式為 第一行輸入長度m 1 m 500 第二行輸入該序列的m個整數ai 231 ai 231 輸出描述 輸出共兩行。第一行輸出兩個序列的最長上公升公共子串行的長度l 第二行輸出該子串行...

最長公共上公升子串行

首先,在 a i b j 的時候有 dp i j dp i 1 j 為什麼呢?因為 dp i j 是以b j 為結尾的 lcia 如果dp i j 0 那麼就說明 a 1 a i 中必然有乙個字元 a k 等於b j 如果dp i j 等於0 呢?那賦值與否都沒有什麼影響了 因為 a k a i 那...