import java.util.*;
public class Main {
public static int n;
public static String mystr[]=new String[50];
public static boolean isN[]=new boolean[50];
public static int MX=-1;
public static int dp[][]=new int [20][65546];
public static int dfs(int x,int y){ //以第x个字符串开头 y二进制选1的链接的最长字符串
if(dp[x][y]>0) return dp[x][y];
int ans=0;
for(int i=0;i<n;i++){
if((isN[i]==false&&mystr[x].charAt(mystr[x].length()-1)==mystr[i].charAt(0))){
isN[i]=true;
ans=Math.max(ans,dfs(i,y|(1<<(i)))); //y|(1<<i) y中二进制第i个(右->左)变1
isN[i]=false;
}
}
return dp[x][y]=ans+mystr[x].length();
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n=sc.nextInt();
String qu=sc.nextLine();
for(int i=0;i<n;i++){
mystr[i]=sc.nextLine();
}
for(int i=0;i<n;i++){
isN[i]=true;
MX=Math.max(MX,dfs(i,1<<i));
isN[i]=false;
}
System.out.println(MX);
}
}
04-22
774
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交