状压 0pts
查看原帖
状压 0pts
54372
A_Đark_Horcrux楼主2021/9/11 17:11
#include<cstdio>
#include<algorithm> 
#include<iostream> 
using namespace std;
int n,ans,i,j,k,f[1<<20][20];
string a[20];
int main()
{
	scanf("%d",&n);
	for(i=0;i<n;i++) cin>>a[i];
	for(i=0;i<n;i++) f[(1<<i)][i]=a[i].length();  
	for(i=1;i<(1<<n);i++)//状态 
		for(j=0;j<n;j++)//最后一个
			if(i&(1<<j))
				for(k=0;k<n;k++)//新加入 
					if((!i&(1<<k))&&a[j][a[j].length()-1]==a[k][0])
						f[i][j]=max(f[i][j],f[i+(1<<k)][k]+(int)a[k].length());
	for(i=0;i<(1<<n);i++)
		for(j=1;j<=n;j++)
			ans=max(ans,f[i][j]);
	printf("%d",ans);
	return 0;
}

2021/9/11 17:11
加载中...