求调
  • 板块灌水区
  • 楼主Kobe_Bryan
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/7/21 11:13
  • 上次更新2024/7/21 12:40:24
查看原帖
求调
1072801
Kobe_Bryan楼主2024/7/21 11:13

P1019

#include<bits/stdc++.h>
using namespace std;
#define For(i,a,b)  for(int i=a;i<=b;i++)
typedef long long ll;
char s[25][15];
int len[25],a[25][25],use[25],n,ans;
bool check(int i,int j,int k)
{
	for(int h=1; h<=k; h++)
		if(s[1][len[i]-k+h]!=s[j][h])return false;
	return true;
}
void dfs(int x,int L)
{
	ans=max(ans,L);
	for(int i=1; i<=n; i++)
		if(a[x][i]>0&&use[i]<2)
		{
			use[i]++;
			dfs(i,L+len[i]-a[x][i]);
			use[i]--;
		}
}
int main()
{
	cin>>n;
	for(int i=1; i<=n; i++)
	{
		scanf("%s",s[i]+1);
		len[i]=strlen(s[i]+1);
	}
	for(int i=1; i<=n; i++)
		for(int j=1; j<=n; j++)
		{
			int m=min(len[i],len[j])-1;
			for(int k=1; k<=m; k++)
				if(check(i,j,k))
				{
					a[i][j]=k;
					break;
				}
		}
	char h;
	cin>>h;
	for(int i=1; i<=n; i++)
		if(a[i][1]==h)
		{
			use[i]=1;
			dfs(i,len[i]);
			use[i]=0;
		}
	cout<<ans;
	return 0;
}

2024/7/21 11:13
加载中...