记录编号 259088 评测结果 AAAAA
题目名称 DNA螺旋串 最终得分 100
用户昵称 Gravatar竹语淡墨 是否通过 通过
代码语言 C++ 运行时间 0.158 s
提交时间 2016-05-08 07:25:34 内存使用 24.69 MiB
显示代码纯文本
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>

using namespace std;

void Work();
void Getpath(int,int);

char a[2001];
char b[2001];
int f[2001][2001];
int flag[2001][2001];
int la,lb;

int main()
{
	freopen("lcsdna.in","r",stdin);
	freopen("lcsdna.out","w",stdout);
	
	memset(flag,0,sizeof(flag));
	
	Work();
	Getpath(la,lb);

	return 0;
}

void Work()
{
	scanf("%s%s",a+1,b+1);
	
	la=strlen(a+1);	
	lb=strlen(b+1);
	
	for(int i=1;i<=la;i++)
	{
		for(int j=1;j<=lb;j++)
		{
			if(a[i]==b[j])
			{
				f[i][j]=max(max(f[i-1][j],f[i][j-1]),f[i-1][j-1]+1);
				flag[i][j]=1;
			}
			else
			{
				f[i][j]=max(f[i-1][j],f[i][j-1]);
				if(f[i][j]==f[i-1][j])
				{
					flag[i][j]=2;
				}
				else
				{
					flag[i][j]=3;
				}
			}
		}
	}
	
	printf("%d\n",f[la][lb]);
}

void Getpath(int i,int j)
{
	if(i==0||j==0)
	{
		return;
	}
	
	if(flag[i][j]==1)
	{
		Getpath(i-1,j-1);
		printf("%c",a[i]);
	}
	else if(flag[i][j]==2)
	{
		Getpath(i-1,j);
	}
	else
	{
		Getpath(i,j-1);
	}
}