记录编号 |
248416 |
评测结果 |
AAAAAAAA |
题目名称 |
[NOIP 2001]统计单词个数 |
最终得分 |
100 |
用户昵称 |
_Itachi |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.000 s |
提交时间 |
2016-04-10 14:21:18 |
内存使用 |
0.00 MiB |
显示代码纯文本
- #include<cstdio>
- #include<cstring>
- #include<iostream>
- #define fre freopen("tjdcgs.in","r",stdin);freopen("tjdcgs.out","w",stdout);
- using namespace std;
- int _rabit();void _run();
- char c[205],dan[7][205];int sum[205][205],f[205][205],len[7];
- int xx=_rabit();
- int main(){;}
- int _rabit(){
- fre
- int tim;scanf("%d",&tim);
- while(tim--)_run();
- }
- void _run(){
- int n,m,p;scanf("%d%d",&n,&m);
- for(int i=0;i<n;i++)
- scanf("%s",c+i*20+1);
- n*=20;scanf("%d",&p);
-
- for(int i=1;i<=p;i++){
- scanf("%s",dan[i]+1);
- len[i]=strlen(dan[i]+1);
- }
- //cout<<c[12]<<' '<<c[13]<<endl;
- for(int i=1;i<=n;i++){
- for(int j=1;j<=p;j++)
- if(c[i]==dan[j][1]){
- bool f=0;
- if(n<i+len[j]-1)f=1;
- else for(int k=1;k<len[j];k++)
- if(c[i+k]!=dan[j][1+k]){
- f=1;break;
- }
- if(!f){
- for(int s=i;s>0;s--)
- for(int t=i+len[j]-1;t<=n;t++)
- sum[s][t]++;
- break;
- }
- }
- }
- //printf("%d %d %d ",sum[1][200],sum[1][197],sum[1][198]);
- //for(int i=1;i<=n;i++)
- //for(int j=1;j<=n;j++)
- //printf("%d %d %d\n",i,j,sum[i][j]);
-
- for(int jj,i=1;i<=n;i++){//前I个数
- jj=i;if(jj>m)jj=m;
- for(int j=1;j<=jj;j++)//多少划分
- for(int k=j-1;k<i;k++)//断点
- if(f[i][j]<f[k][j-1]+sum[k+1][i])
- f[i][j]=f[k][j-1]+sum[k+1][i];
- }
- //if(f[n][m]==192)f[n][m]++;
- printf("%d",f[n][m]);
- }