记录编号 248416 评测结果 AAAAAAAA
题目名称 [NOIP 2001]统计单词个数 最终得分 100
用户昵称 Gravatar_Itachi 是否通过 通过
代码语言 C++ 运行时间 0.000 s
提交时间 2016-04-10 14:21:18 内存使用 0.00 MiB
显示代码纯文本
  1. #include<cstdio>
  2. #include<cstring>
  3. #include<iostream>
  4. #define fre freopen("tjdcgs.in","r",stdin);freopen("tjdcgs.out","w",stdout);
  5. using namespace std;
  6. int _rabit();void _run();
  7. char c[205],dan[7][205];int sum[205][205],f[205][205],len[7];
  8. int xx=_rabit();
  9. int main(){;}
  10. int _rabit(){
  11. fre
  12. int tim;scanf("%d",&tim);
  13. while(tim--)_run();
  14. }
  15. void _run(){
  16. int n,m,p;scanf("%d%d",&n,&m);
  17. for(int i=0;i<n;i++)
  18. scanf("%s",c+i*20+1);
  19. n*=20;scanf("%d",&p);
  20. for(int i=1;i<=p;i++){
  21. scanf("%s",dan[i]+1);
  22. len[i]=strlen(dan[i]+1);
  23. }
  24. //cout<<c[12]<<' '<<c[13]<<endl;
  25. for(int i=1;i<=n;i++){
  26. for(int j=1;j<=p;j++)
  27. if(c[i]==dan[j][1]){
  28. bool f=0;
  29. if(n<i+len[j]-1)f=1;
  30. else for(int k=1;k<len[j];k++)
  31. if(c[i+k]!=dan[j][1+k]){
  32. f=1;break;
  33. }
  34. if(!f){
  35. for(int s=i;s>0;s--)
  36. for(int t=i+len[j]-1;t<=n;t++)
  37. sum[s][t]++;
  38. break;
  39. }
  40. }
  41. }
  42. //printf("%d %d %d ",sum[1][200],sum[1][197],sum[1][198]);
  43. //for(int i=1;i<=n;i++)
  44. //for(int j=1;j<=n;j++)
  45. //printf("%d %d %d\n",i,j,sum[i][j]);
  46. for(int jj,i=1;i<=n;i++){//前I个数
  47. jj=i;if(jj>m)jj=m;
  48. for(int j=1;j<=jj;j++)//多少划分
  49. for(int k=j-1;k<i;k++)//断点
  50. if(f[i][j]<f[k][j-1]+sum[k+1][i])
  51. f[i][j]=f[k][j-1]+sum[k+1][i];
  52. }
  53. //if(f[n][m]==192)f[n][m]++;
  54. printf("%d",f[n][m]);
  55. }