记录编号 |
241923 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[HAOI 2010]最长公共子序列 |
最终得分 |
100 |
用户昵称 |
MistyEye |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
1.296 s |
提交时间 |
2016-03-26 10:43:17 |
内存使用 |
119.25 MiB |
显示代码纯文本
#include <cstdio>
#include <iostream>
#define maxn 5100
using namespace std;
int n[maxn][maxn],m[maxn][maxn];
void mod(int &a){a=(a+100000000)%100000000;}
int wo(){
freopen("lcs.in","r",stdin);
freopen("lcs.out","w",stdout);
string a,b;
cin >>a >>b;
int la=a.size()-1, lb=b.size()-1;
a='0'+a;b='0'+b;
for(int i=0; i<=la; i++)m[i][0]=1;
for(int i=1; i<=lb; i++)m[0][i]=1;
for(int i=1; i<=la; i++)
for(int j=1; j<=lb; j++){
if(a[i]==b[j])n[i][j]=n[i-1][j-1]+1,
m[i][j]=m[i-1][j-1];
else n[i][j]=max(n[i][j-1],n[i-1][j]);
if(n[i][j-1]==n[i][j])m[i][j]+=m[i][j-1];
if(n[i-1][j]==n[i][j])m[i][j]+=m[i-1][j];
if(n[i-1][j-1]==n[i][j]&&a[i]!=b[j])
m[i][j]-=m[i-1][j-1];
mod(m[i][j]);
}
printf("%d\n%d",n[la][lb],m[la][lb]);
return 0;
}
int aaa=wo();
int main(){;}