P1278 单词游戏
入场券:写完了 DFS 只有
70
70
70 分
我们只需加一个小小的减枝
#include<bits/stdc++.h>
using namespace std;
int n;
string s[20];
bool vis[20];
int mx;
int tot;
void dfs(int step,int len){
tot++;
if(tot>4e7) return ;//注意这里
vis[step]=1;
mx=max(mx,len);
for(int i=1;i<=n;i++){
if(!vis[i] && s[i][0]==s[step][s[step].size()-1]){
dfs(i,len+s[i].size());
vis[i]=0;
}
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++) cin>>s[i];
for(int i=1;i<=n;i++){
dfs(i,s[i].size());
vis[i]=0;
}
printf("%d",mx);
return 0;
}