80分wa求助
查看原帖
80分wa求助
396789
q_james_c楼主2021/11/9 16:44
#include<bits/stdc++.h>
using namespace std;
int p,k,n;
int sum[205][205];
int dp[205][45];
map <int ,map<int ,int> > m;//map[i][j] 从i到j的单词数 
string s;
string ss[10];

int check(int l,int r){
	string now=s.substr(l,r-l+1);
	for (int i=1;i<=n;++i){
		if(now.find(ss[i])==0) return 1;
	}
	return 0;
}

int main(){
	cin>>p>>k;
	for (int i=1;i<=p;++i){
		string x;
		cin>>x;
		s+=x;
	}
	cin>>n;
	for (int i=1;i<=n;++i){
		cin>>ss[i];
	}
	for (int i=s.size()-1;i>=0;--i){
		for (int j=i;j>=0;--j){
			sum[j][i]=sum[j+1][i];
			if(check(j,i)) sum[j][i]++;
		}
	}
	for (int i=0;i<=s.size()-1;++i){
		dp[i][i]=dp[i-1][i-1]+sum[i][i];
		dp[i][0]=0;
		dp[i][1]=sum[0][i];
	}
	for (int i=s.size()-1;i>=0;--i){
		for (int j=1;j<=k&&j<=i;++j){
			for (int k=i;k>=j;--k){
				dp[i][j]=max(dp[i][j],dp[k][j-1]+sum[k+1][i]);
			}
		}
	}
	cout<<dp[s.size()-1][k];
	return 0;
}
2021/11/9 16:44
加载中...