子串

截图自齐神的题解

预处理

计算数组的空间,可以用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 } 

 

posted @ 2018-08-21 10:35  lcan  阅读(319)  评论(0编辑  收藏  举报