#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...