题目:
题解:
注意:
1、想思路的时候注意不能有重叠的情况,要考虑清楚
2、模数时时刻刻都要%啊
3、滚动数组不能填的[1]要设为0,不然对下一位造成影响
代码:
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int Mod=1e9+7;
char a[1005],b[205];
int f[2][205][205][2];
int main()
{
int n,m,w,i,j,k;
scanf("%d%d%d",&n,&m,&w);
scanf("%s",a); scanf("%s",b);
f[0][0][0][0]=f[1][0][0][0]=1;
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
for (k=1;k<=w;k++)
{
if (a[i-1]==b[j-1])
f[i&1][j][k][1]=((f[(i-1)&1][j-1][k][1]+f[(i-1)&1][j-1][k-1][0])%Mod+f[(i-1)&1][j-1][k-1][1])%Mod;
else f[i&1][j][k][1]=0;
f[i&1][j][k][0]=(f[(i-1)&1][j][k][1]+f[(i-1)&1][j][k][0])%Mod;
}
printf("%d",(f[n&1][m][w][0]+f[n&1][m][w][1])%Mod);
}