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

最长公共子序列

三个串比较

posted @ 2018-10-14 23:36  codemaker_li  阅读(128)  评论(1编辑  收藏  举报