HDU 1159 Common Subsequence(基础dp)

来源:互联网 发布:把ubuntu安装到u盘上 编辑:程序博客网 时间:2024/06/05 08:50
/*基础dpL - Common Subsequence时间: 2017/02/23题意:求最长公共子序列题解: LCS题具体的思路我在其他写51nod 1006 题解写过。简单的来讲:dp[i][j] 表示在第一序列的前i个和第二序列的前j个的最长公共子序列长度dp[i][j] = a[i] == b[j] ? dp[i-1][j-1]+1 : max(dp[i-1][j],dp[i][j-1]);*/#include<cstdio>#include<cstring>#include<cmath>#include<iostream>#include<algorithm>#include<queue>#include<map>using namespace std;#define N 1010#define INF 0x3f3f3f3fint dp[N][N];char a[N],b[N];int main(){    while(~scanf("%s%s",a+1,b+1))    {//        cout << a << b << endl;        memset(dp,0,sizeof(dp));        int lena = strlen(a+1);        int lenb = strlen(b+1);        for(int i = 1; i <= lena; i++)        {            for(int j = 1; j <= lenb; j++)                dp[i][j] = a[i] == b[j] ? dp[i-1][j-1]+1 : max(dp[i-1][j],dp[i][j-1]);        }        printf("%d\n",dp[lena][lenb]);    }    return 0;}


0 0