1. 程式人生 > 實用技巧 >關於orm的個人測試——SqlSugar與FreeSql

關於orm的個人測試——SqlSugar與FreeSql

連結:Miku


\(dp_{i,j,k,0/1}\)表示A串

應該

取i,j個的時候的方案數

然後要考慮的就是

如果\(a_{i-1}\)==\(b_{j-1}\)

那麼\(dp_{i,j,k,1}\)=\(dp_{i-1,j-1,k,1}\)+\(dp_{i-1,j-1,k-1,1}\)+\(dp_{i-1,j-1,k-1,0}\)
//其實也就是拼到原來的上,在原來的後面強拆一個,正常的新建一個
反之 \(dp_{i,j,k,1}\)=0;

然後對於所有的\(dp_{i,j,k,0}\)=\(dp_{i-1,j,k,1}\)+\(dp_{i-1,j,k,0}\)

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std;
int n,m,k,z;
string a,b;
//用char會有奇怪的格式問題
int f[2][1001][300][2];
int mod=1000000007;
int main(){
	scanf("%d%d%d",&n,&m,&z);
	cin>>a>>b;
//	cout<<a[0];
	f[1][0][0][0]=f[0][0][0][0]=1;
	for(int i=1;i<=n;++i){
		for(int j=1;j<=m;++j){
			for(int k=1;k<=z;++k){
				if(a[i-1]==b[j-1]){
					f[i%2][j][k][1]=((f[(i+1)%2][(j-1)][k][1]+f[(i+1)%2][(j-1)][k-1][1])%mod+f[(i+1)%2][(j-1)][k-1][0])%mod;
					f[i%2][j][k][0]=(f[(i+1)%2][j][k][1]+f[(i+1)%2][j][k][0])%mod;
				}else{
					f[i%2][j][k][1]=0;
					f[i%2][j][k][0]=(f[(i+1)%2][j][k][1]+f[(i+1)%2][j][k][0])%mod;
				} 
			}
		}
	}
	cout<<(f[(n)%2][m][z][0]+f[(n)%2][m][z][1])%mod;
	return 0;
}