P2543 [AHOI2004]奇怪的字符串
题目描述
输入输出格式
输入格式:
输入文件中包含两个字符串X和Y。当中两字符串非0即1。序列长度均小于9999。
输出格式:
X和Y的最长公共子序列长度。
输入输出样例
输入样例#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; }