记录编号 241942 评测结果 AAAAA
题目名称 DNA螺旋串 最终得分 100
用户昵称 GravatarSky_miner 是否通过 通过
代码语言 C++ 运行时间 0.009 s
提交时间 2016-03-26 11:09:12 内存使用 6.46 MiB
显示代码纯文本
#include<cstdio>
#include<cstring> 
using namespace std;
const int maxn = 1000 + 10 ;
inline int cat_max(const int a,const int b){
	return a>b? a:b;
}
char s1[maxn],s2[maxn];
int f[maxn][maxn];
int flag[maxn][maxn];
int main(){
	freopen("lcsdna.in","r",stdin);
	freopen("lcsdna.out","w",stdout);
	scanf("%s %s",s1+1,s2+1);
	s1[0] = '+';s2[0] = '-';
	int len1 = strlen(s1) - 1;
	int len2 = strlen(s2) - 1;
	for(int i=1;i<=len1;i++)
		for(int j=1;j<=len2;j++){
			if( s1[i] == s2[j] ){
				f[i][j] = f[i-1][j-1] + 1 ;
				flag[i][j]=0;
			}
			else if(f[i-1][j]>=f[i][j-1]){
				f[i][j]=f[i-1][j];
				flag[i][j]=1;
			}
			else f[i][j]=f[i][j-1],flag[i][j]=2;
		}
	printf("%d\n",f[len1][len2]);	
	int up_side = f[len1][len2];
	char ans[5010];
	int i = len1,j=len2;
	while(f[i][j]!=0){
		if(flag[i][j]==0){ans[--up_side]=s1[i];i--;j--;}
		else if(flag[i][j]==1) i--;
		else if(flag[i][j]==2) j--;
	}
	printf("%s",ans);
	return 0;
}