不知道哪错了 求大佬指教QAQ

P1026 [NOIP2001 提高组] 统计单词个数

``` #include<bits/stdc++.h> #define N 250 using namespace std; int p,k,cnt,s,ans,v[N][N],f[N][N]; char str[N]; string S[9]; bool compare(string s,int t) { int l=s.size(); if(cnt<t+l-1) return 0; for(int i=0;i<l;i++) { if(s[i]!=str[t+i]) { return 0; } } return 1; } void Read() { scanf("%d%d",&p,&k); for(int i=1;i<=p;i++) { for(int j=1;j<=20;j++) { char c; while(true) { scanf("%c",&c); if(c!='\r') break; } str[++cnt]=c; } } scanf("%d",&s); for(int i=1;i<=s;i++) cin>>S[i]; } void Work() { for(int i=1;i<=cnt;i++) { for(int j=1;j<=s;j++) { if(compare(S[j],i)) { v[i][i]=1; } } } for(int len=2;len<=cnt;len++) { for(int i=1;i+len-1<=cnt;i++) { int t=i+len-1; v[i][t]=v[i][t-1]+v[t][t]; } } for(int len=1;len<=cnt;len++) { for(int i=1;i<=k;i++) { for(int j=i;j<=len;j++) { f[len][i]=max(f[len][i],f[j-1][i-1]+v[j][len]); } } } } void Output() { printf("%d",f[cnt][k]); } int main() { Read(); Work(); Output(); return 0; } ``` 32
by pmxin163 @ 2021-08-30 14:22:53


|