第 9 个点不对,求大佬指点
#include<bits/stdc++.h>
using namespace std;
int p,k,n,m,dp[205][45],tmp[205][205];
string s,t,a[10];
map<string,bool>mp;
int main(){
cin>>p>>k;
for(int i=1;i<=p;i++){
cin>>t;
s+=t;
}
n=s.size();
cin>>m;
s=" "+s;
for(int i=1;i<=m;i++){
cin>>a[i];
string str=a[i];
if(mp[str]){
m--;
i--;
continue;
}
mp[str]=1;
}
for(int i=1;i<=n;i++){
for(int j=i;j<=n;j++){
string xl=s.substr(i,j-i+1);
bool ok=0;
for(int l=1;l<=m;l++){
if(xl==a[l]){
for(int x=1;x<=i;x++){
for(int y=j;y<=n;y++){
tmp[x][y]++;
}
}
ok=1;
break;
}
}
if(ok)break;
}
}
for(int i=1;i<=n;i++){
dp[i][0]=tmp[1][i];
}
for(int l=1;l<k;l++){
for(int i=1;i<=n;i++){
for(int j=0;j<i;j++){
if(n-i<k-l)break;
if(j<l-1)continue;
if(i<l-1)break;
dp[i][l]=max(dp[j][l-1]+tmp[j+1][i],dp[i][l]);
}
}
}
int ans=0;
for(int i=1;i<=n;i++){
ans=max(ans,dp[i][k-1]);
}
cout<<ans;
return 0;
}