60分求调
查看原帖
60分求调
1020370
ztt0430楼主2024/9/11 22:46
#include<bits/stdc++.h>
using namespace std;
char a[1005],b[205];
int n,m,s;
int f[2][205][205][2];
const int mod=1e9+7;
int main(){
	cin>>n>>m>>s;
	cin>>a+1>>b+1;
	for(int i=0;i<=n;i++)f[i&1][0][0][0]=1;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			for(int k=0;k<=s;k++){
				f[i&1][j][k][0]=f[i&1][j][k][1]=0;
				f[i&1][j][k][0]=(f[(i-1)&1][j][k][0]+f[(i-1)&1][j][k][1])%mod;
				if(a[i]==b[j]){
					f[i&1][j][k][1]=(f[i&1][j][k][1]+f[(i-1)&1][j-1][k][1]) % mod;
					if(k>=1)f[i&1][j][k][1]=(f[i&1][j][k][1]+f[(i-1)&1][j-1][k-1][0]+f[(i-1)&1][j-1][k-1][1])%mod;
				}
				else f[i&1][j][k][1]=0;                                           
			}
			
		}
	}
	cout<<(f[n&1][m][s][0]+f[n&1][m][s][1])%mod;
}
2024/9/11 22:46
加载中...