简单记忆化求调,悬二关
查看原帖
简单记忆化求调,悬二关
654577
RainySoul楼主2023/10/8 13:42

rt,爆搜+记忆化80,WA#4#5

#include<bits/stdc++.h>
using namespace std;
string w[20];
int n,flag[20],maxn;
map<string,bool> jiyihua;
void dfs(int now,int sum){
//	cout<<"dfs("<<now<<","<<sum<<");";
	string temp="";
	for(int i=1;i<=n;i++)
		temp+=flag[i]+'0';
//	cout<<"temp="<<temp<<'\n';
	if(jiyihua[temp])return;
	jiyihua[temp]=1;
	string sn=w[now];
	bool f=0;
	for(int i=1;i<=n;i++){
		if(!flag[i]&&w[i][0]==sn[sn.size()-1]){
			f=1;
			flag[i]=1;
			dfs(i,sum+w[i].size());
			flag[i]=0;
		}
	}
	if(!f)maxn=max(maxn,sum);
}
int main(){
	cin>>n;
	for(int i=1;i<=n;i++)cin>>w[i];
	for(int i=1;i<=n;i++){
		flag[i]=1;
		dfs(i,w[i].size());
		flag[i]=0;
	}
	cout<<maxn;
	return 0;
}
2023/10/8 13:42
加载中...