截图自齐神的题解
预处理
计算数组的空间,可以用sizeodf
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 int a[2007][207][207]; 5 int b; 6 int main(){ 7 int ans=sizeof(a); 8 ans/=1024; 9 ans/=1024; 10 cout<<ans<<"MB"<<endl; 11 return 0; 12 } 13 /*sizeof单位是Byte 14 1TB=1024GB 15 1GB=1024MB 16 1MB=1024KB 17 1KB=1024Byte*/
我的h是选或不选,f是必须选
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 const int mod=1000000007; 5 const int maxn=1007; 6 const int maxm=207; 7 int n,m,maxk; 8 int f[3][maxm][maxm],h[3][maxm][maxm]; 9 char a[maxn],b[maxm]; 10 int main(){ 11 cin>>n>>m>>maxk; 12 for(int i=1;i<=n;i++) cin>>a[i]; 13 for(int i=1;i<=m;i++) cin>>b[i]; 14 int now=1,past=0; 15 h[0][0][0]=1; 16 for(int i=1;i<=n;i++){ 17 h[now][0][0]=1; 18 for(int j=1;j<=m;j++){ 19 for(int k=1;k<=maxk;k++){ 20 if(a[i]==b[j]) f[now][j][k]=(f[past][j-1][k]+h[past][j-1][k-1])%mod; 21 else f[now][j][k]=0; 22 h[now][j][k]=(f[now][j][k]+h[past][j][k])%mod; 23 } 24 } 25 swap(now,past); 26 } 27 cout<<h[n%2][m][maxk]%mod<<endl; 28 return 0; 29 }