P2543 [AHOI2004]奇怪的字符串

题目描述

输入输出格式

输入格式:

输入文件中包含两个字符串X和Y。当中两字符串非0即1。序列长度均小于9999。

输出格式:

X和Y的最长公共子序列长度。

输入输出样例

输入样例#1: 复制
01010101010 00000011111
输出样例#1: 复制
6
输入样例#2: 复制
01011 010010101111111111
输出样例#2: 复制
5


/*DP
    我们可以知道,在每一个位置有三种状态,i表示a串下标,j表示b串下标。
    1、a[i]==b[i] --> dp[i][j]=dp[i-1][j-1]+1
    2、a[i]!=b[j]--> dp[i][j]=max(dp[i][j-1],dp[i-1][j]  
    所以判断每个位置的状态,DP求解就可以了。 
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;

string a,b;
int dp[10001][10001];

int main()
{
    cin>>a>>b;
    int la=a.length(),lb=b.length();
    for(int i=1;i<=la;i++)    //从1开始,避免数组下标变负 
    {
        for(int j=1;j<=lb;j++)
        {
            if(a[i-1]==b[j-1]) dp[i][j]=dp[i-1][j-1]+1;
            else dp[i][j]=max(dp[i][j-1],dp[i-1][j]);
        }
    }
    printf("%d",dp[la][lb]);
    return 0;
}
原文地址:https://www.cnblogs.com/lovewhy/p/8717625.html