记录编号 318185 评测结果 AAAAAAAAAA
题目名称 [NOIP 2015]子串 最终得分 100
用户昵称 GravatarLOSER 是否通过 通过
代码语言 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;	
}