比赛 动态规划练习2 评测结果 AAAAAAAAAA
题目名称 最长公共子序列 最终得分 100
用户昵称 Emine 运行时间 0.447 s
代码语言 C++ 内存使用 95.91 MiB
提交时间 2017-03-28 19:40:14
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=5005;
int s1[maxn]={0},s2[maxn]={0};  //字符序列 
int a1,a2;                      //字符序列长度 
int f[maxn][maxn]={0};          //最长公共子序列长度
void dp()                         
{
	for(int i=1;i<=a1;i++)
	{
		for(int j=1;j<=a2;j++)
		{
			if(s1[i]==s2[j]) 
			  f[i][j]=f[i-1][j-1]+1;
			else 
			  f[i][j]=max(f[i][j-1],f[i-1][j]);
		}
	}
}
int main()
{
	freopen("lcslength.in","r",stdin);
	freopen("lcslength.out","w",stdout);
	string s;
	int i=0;
	cin>>s;
	while(s[i]!='.') 
	{
		s1[i+1]=s[i]-'A';
		i++;
	}
	a1=i;
	cin>>s;
	i=0;
	while(s[i]!='.') 
	{
		s2[i+1]=s[i]-'A';
		i++;
	}
	a2=i;
	dp();
	printf("%d\n",f[a1][a2]);
	return 0;
}