演算法 最長遞增子串行 最長公共子串

2021-06-14 08:55:46 字數 1158 閱讀 5739

#include#include#define maxsequence 1000

#define maxdif 1000

using namespace std;

void print_lcs(int (*rec)[100],int a, int b, int i, int j);

//---------最長遞增子串行-----------

//動態規劃 o(n*n) 遞推式:len[i] = max

int maxlen=0;

for(int i=0;imaxlen)

maxlen=len[i];

return maxlen;

}//動態規劃o(nlogn),求最長遞增子串的長度更快捷,難以輸出最長子串。

int lis_bin(int a,int n)

return len;

}//o(n*n),但儲存空間從o(n)增大到o(n*maxdis),maxdis為所有元素的最大差值,有沒有更好的方法?

int lis_equaldif(int a, int n)

int maxdif = maxval - minval;

memset(len,0,n*(maxdif+1)*sizeof(int));

for(int i=1;i=0) //注意是等差,所以相等也算

len[i][dis] = len[j][dis] + 1;

} }int result=0;

for(int i=0;ilen[i+1][j] )

len[i+1][j+1]=len[i][j+1];

else

len[i+1][j+1]=len[i+1][j];

}} }

return len[i][j];

}//分治,最長公共子串,o(2^n) ,有太多的重複計算,導致複雜度呈指數級增長

int lcs_recur(int a, int n, int b,int m)

else

}int main()

{loop:

int a[maxsequence],b[maxsequence],n,m;

//lis

printf("n: ");

scanf("%d",&n);

for(int i=0;i

最長遞增子串行 最長公共子串行 最長公共子串

最長遞增子串行a 給定乙個長度為n的陣列,找出乙個最長的單調自增子序列 不一定連續,但是順序不能亂 例如 給定乙個長度為8的陣列a,則其最長的單調遞增子串行為,長度為6.輸入描述 第一行包含乙個整數t,代表測試資料組數。對於每組測試資料 n 陣列的長度 a1 a2 an 需要計算的陣列 保證 1 n...

最長公共子串行 最長遞增子串行 最長遞增公共子串行

求最長公共子串行 int dp maxn maxn int a maxn b maxn int main else dp i j max dp i 1 j dp i j 1 printf d n dp m n return 0 輸出最長公共子串行 int dp maxn maxn int d max...

最長公共子串行 最長遞增子串行

最長公共子串行 dp 杭電1159 include using namespace std string str1,str2 int dp 1005 1005 intlcs return dp str1.size str2.size int main 最長遞增子串行 杭電1257 include u...