记录编号 |
242270 |
评测结果 |
AAAAA |
题目名称 |
DNA螺旋串 |
最终得分 |
100 |
用户昵称 |
Go灬Fire |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.006 s |
提交时间 |
2016-03-27 07:23:42 |
内存使用 |
8.89 MiB |
显示代码纯文本
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=1060;
int f[maxn][maxn],d[maxn][maxn];
string s1,s2;
void Init();
void Print(int,int);
int main(){
freopen("lcsdna.in","r",stdin);
freopen("lcsdna.out","w",stdout);
Init();
return 0;
}
void Init(){
cin>>s1>>s2;
int len1=s1.length(),len2=s2.length();
for(int i=1;i<=len1;i++){
for(int j=1;j<=len2;j++){
if(s1[i-1]==s2[j-1]){
f[i][j]=f[i-1][j-1]+1;
d[i][j]=0;
}
else {
if(f[i][j-1]>f[i-1][j]){
f[i][j]=f[i][j-1];
d[i][j]=2;
}
else {
f[i][j]=f[i-1][j];
d[i][j]=1;
}
/*if(f[i-1][j]>f[i][j-1]){
f[i][j]=f[i-1][j];
d[i][j]=1;
}
else {
f[i][j]=f[i][j-1];
d[i][j]=2;
}*/
}
}
}
printf("%d\n",f[len1][len2]);
Print(len1,len2);
}
void Print(int i,int j){
if(i==0 || j==0)return;
if(d[i][j]==0){
Print(i-1,j-1);
printf("%c",s1[i-1]);
}
if(d[i][j]==1)Print(i-1,j);
if(d[i][j]==2)Print(i,j-1);
}