1.题目编号
1002
2.简单题意
题目的大体意思就是给你两个字符串,要求你找出两个字符串中相同字符的个数
3.解题思路
设dp[i][j]是字符串s1的第i和字符串s2的第j个字符为止的最长公共子序列的长度,则由题意得(1)s1[i-1]==s2[j-1]时,dp[i][j]=dp[i-1][j-1]+1;(2)s1[i-1]!==s2[j-1]时,dp[i][j]=max(dp[i+1][j],dp[i][j+1]).
4.感想
和题目a相似,但不好做,题目这么长都看不懂
5.代码
#include <iostream>
#include <cstring>
using namespace std;
char s1[1000];
char s2[1000];
int dp[1000][1000];
int main()
{
int i,j;
int Max;
int len1,len2;
while(cin>>s1>>s2)
{
len1=strlen(s1);
len2=strlen(s2);
for(i=0;i<len1;i++)
{
dp[i][0]=0;
}
for(i=0;i<len2;i++)
{
dp[0][i]=0;
}
for(i=1;i<=len1;i++)
{
for(j=1;j<=len2;j++)
{
if(s1[i-1]==s2[j-1])
{
dp[i][j]=dp[i-1][j-1]+1;
}
else
{
dp[i][j]=max(dp[i+1][j],dp[i][j+1]);
}
}
}
cout<<dp[len1][len2]<<endl;
}
return 0;
}