求助站外题
  • 板块学术版
  • 楼主GSRgsrgsr
  • 当前回复7
  • 已保存回复7
  • 发布时间2022/12/30 10:46
  • 上次更新2023/10/24 06:09:19
查看原帖
求助站外题
550579
GSRgsrgsr楼主2022/12/30 10:46
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int MAXN=20;
struct node{
	char a,b;
	int len;
}s[MAXN];
int ans,n,edge[MAXN][MAXN];
bool vis[MAXN];
void dfs(int now,int sum){
	for(int i=1;i<=edge[now][0];++i){
		int v=edge[now][i];
		if(!vis[v]){
			vis[v]=true;
			dfs(v,sum+s[v].len);
			vis[v]=false;
		}
	}
	ans=max(ans,sum);
	return;
}
signed main(){
	scanf("%lld",&n);
	for(int i=1;i<=n;++i){
		string ss;
		cin>>ss;
		int l=ss.length();
		s[i].a=ss[0];
		s[i].b=ss[l-1];
		s[i].len=l;
	}
	for(int i=1;i<=n;++i){
		for(int j=1;j<=n;++j){
			if(s[i].b==s[j].a){
				edge[i][0]++;
				edge[i][edge[i][0]]=j;
			}
		}
	}
	for(int i=1;i<=n;++i){
		memset(vis,0,sizeof(vis));
		vis[i]=true;
		dfs(i,s[i].len);
	}
	printf("%lld",ans);
	return 0;
}

请问这代码不是O(2n)O(2^n)的吗?为什么过不了n=16n=16的数据?

2022/12/30 10:46
加载中...