dp,LCS
1 #include <iostream> 2 #include <stdio.h> 3 #include <cstring> 4 using namespace std; 5 int dp[300][300][300]; 6 char a[1000]; 7 char b[1000]; 8 char c[1000]; 9 int main() 10 { 11 memset(dp,0,sizeof(0)); 12 gets(a); 13 gets(b); 14 gets(c); 15 int lena=strlen(a); 16 int lenb=strlen(b); 17 int lenc=strlen(c); 18 for(int i=1;i<=lena;i++) 19 { 20 for(int j=1;j<=lenb;j++) 21 { 22 for(int k=1;k<=lenc;k++) 23 { 24 if(a[i-1]==b[j-1]&&a[i-1]==c[k-1]) 25 { 26 dp[i][j][k]=max(dp[i][j][k],dp[i-1][j-1][k-1]+1); 27 } 28 else 29 dp[i][j][k]=max(max(dp[i-1][j][k],dp[i][j-1][k]),dp[i][j][k-1]); 30 } 31 } 32 } 33 printf("%d\n",dp[lena][lenb][lenc]); 34 return 0; 35 }
LCS
最长公共子序列
三个串比较