90pts求助WA
查看原帖
90pts求助WA
782700
ruanwentao666楼主2024/6/2 22:00

第 99 个点不对,求大佬指点

#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;
}
2024/6/2 22:00
加载中...