0pts求调
查看原帖
0pts求调
1336222
chenyixuan18楼主2024/10/22 13:42

代码如下:

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=1000000007;
int n,m,K,dp[2][1005][205][2];
char A[1005],B[1005];
signed main(){
	cin>>n>>m>>K;
	for(int i=1;i<=n;i++){
		cin>>A[i];
	}
	for(int j=1;j<=m;j++){
		cin>>B[j];
	}
	dp[0][0][0][0]=dp[1][0][0][0]=1;
	bool p=0;
	for(int i=1;i<=n;i++){
	    p=!p;
		for(int j=1;j<=m;j++){
			for(int k=1;k<=K;k++){
				if(A[i]!=B[j]){
					dp[p][j][k][0]+=dp[!p][j][k][0];
					dp[p][j][k][0]+=dp[!p][j][k][1];
					dp[p][j][k][1]=0;
				}
				else{
					dp[p][j][k][0]+=dp[!p][j][k][0];
					dp[p][j][k][0]+=dp[!p][j][k][1];
					dp[p][j][k][1]+=dp[!p][j-1][k][1];
					dp[p][j][k][1]+=dp[!p][j-1][k-1][0];
					dp[p][j][k][1]+=dp[!p][j-1][k-1][1];
				}
				dp[p][j][k][0]%=mod;
				dp[p][j][k][1]%=mod;
			}
		}
	}
	
	cout<<(dp[(n+1)&1][m][K][0]+dp[(n+1)&1][m][K][1])%mod; 
	return 0;
}
2024/10/22 13:42
加载中...