1018
#include <stdio.h>
#include <string.h>
int Len[21],P[21],MAX,N;char Word[21][100];void DFS(int d,int s){ int i,j,k,l; for (i=1;i<=N;i++) if (P[i]<2) for (j=0;j<Len[d];j++) if (Word[i][0]==Word[d][j]) { for (l=1,k=j+1;k<Len[d]&&Word[i][l]==Word[d][k];k++,l++); if (k<Len[d]) continue; P[i]++; DFS(i,s+Len[i]-l); P[i]--; } if (s>MAX) MAX=s;}int main(){ int i; scanf("%d",&N); for (i=1;i<=N;Len[i]=strlen(Word[i]),i++) scanf("%s",Word[i]); scanf("%s",Word[0]); Len[0]=strlen(Word[0]); DFS(0,Len[0]); printf("%d",MAX); return 0;}
#include <stdio.h>
#include <string.h>
int Len[21],P[21],MAX,N;char Word[21][100];void DFS(int d,int s){ int i,j,k,l; for (i=1;i<=N;i++) if (P[i]<2) for (j=0;j<Len[d];j++) if (Word[i][0]==Word[d][j]) { for (l=1,k=j+1;k<Len[d]&&Word[i][l]==Word[d][k];k++,l++); if (k<Len[d]) continue; P[i]++; DFS(i,s+Len[i]-l); P[i]--; } if (s>MAX) MAX=s;}int main(){ int i; scanf("%d",&N); for (i=1;i<=N;Len[i]=strlen(Word[i]),i++) scanf("%s",Word[i]); scanf("%s",Word[0]); Len[0]=strlen(Word[0]); DFS(0,Len[0]); printf("%d",MAX); return 0;}