记录编号 |
318185 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[NOIP 2015]子串 |
最终得分 |
100 |
用户昵称 |
LOSER |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
1.698 s |
提交时间 |
2016-10-09 06:14:10 |
内存使用 |
2.27 MiB |
显示代码纯文本
#include<cstdio>
#include<string>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
#define maxn 1010
#define maxm 210
#define mod 1000000007
int n,m,k,s[2][maxn][maxm],f[2][maxm][maxm];
char s1[maxn],s2[maxm];
int main(){
freopen("2015substring.in","r",stdin); freopen("2015substring.out","w",stdout);
scanf("%d%d%d",&n,&m,&k);
bool now=1,past=0;
scanf("%s%s",s1+1,s2+1);
f[0][0][0]=1;
for(int i=1;i<=n;i++){
f[now][0][0]=1;
for(int j=1;j<=m;j++){
for(int kk=1;kk<=k;kk++){
if(s1[i]==s2[j])
s[now][j][kk]=(f[past][j-1][kk-1]+s[past][j-1][kk])%mod;
else s[now][j][kk]=0;
f[now][j][kk]=(f[past][j][kk]+s[now][j][kk])%mod;
}
}
memset(f[past],0,sizeof(f[past]));
memset(s[past],0,sizeof(s[past])); swap(past,now);
}
printf("%d\n",f[past][m][k]);
return 0;
}