状压80 第一第二个点WA求调
查看原帖
状压80 第一第二个点WA求调
665455
our_gzzx_coding楼主2023/8/4 12:05
#include <iostream>
using namespace std;

#define max(a,b) a>b?a:b
string s[20];
int f[1<<16][20];//f[S][i]表示当前已选字符串集为S,最后一个选的字符串是第i个
int main()
{
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)cin>>s[i],f[1<<(i-1)][i]=s[i].size();
	f[0][0]=0;
	for(int i=1;i<(1<<n);i++)
	{
		for(int j=0;j<=n;j++)
		{
			if(!((1<<(j-1))&i))continue;
			for(int k=0;k<=n;k++)
			{
				if(j==k)continue;
				if(!((1<<(k-1))&i))continue;
				if(s[j][0]!=s[k][s[k].size()-1])continue;
				f[i][j]=max(f[i][j],f[(1<<(j-1))^i][k]+s[j].size());
			}
		}
	}
	int ans=0;
	for(int i=0;i<(1<<n)-1;i++)
		for(int j=1;j<=n;j++)
		{
			ans=max(ans,f[i][j]);
		}
	cout<<ans<<endl;
	return 0;
}
2023/8/4 12:05
加载中...