關於orm的個人測試——SqlSugar與FreeSql
阿新 • • 發佈:2020-09-19
連結: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; }