分析:これは、DFSの簡単な質問で、DFSのアイデアが網羅され、私たちはすべての可能なランデブー網羅アウトを置くことを、最長かかり、
難易度は、文字列マッチング、他の文字列コードの後ろに接続された、すなわち文字列です。
#include <cstdioを> する#include <iostreamの> する#include <CStringの> する#include <アルゴリズム> 使用して名前空間STDを、チャー S [ 50 ] [ 50 ]。 int型 N、ANSにおいてlen = 1 。 int型 VIS [ 50 ]。 インラインボイド DFS(int型K) { ANS = MAX(ANS、LEN)。 用(int型 iは= 1 ; iが<= N iが++ ) { 場合(VIS [I] < 2 ) { 用 (int型 J = 0 ; J <strlenを(S [K]); J ++ ) { もし、(S [i]が[ 0 ] == S [k]は[J]) { int型 CNT1 = 0、CNT2 = J。 一方、(S [I] [CNT1] == S [k]は[CNT2] && CNT2 <STRLEN(S [K]))CNT1 ++、CNT2 ++ 。 もし(CNT2 == STRLEN(S [K])) { VIS [I] ++ ; LEN + = STRLEN(S [I]) - CNT1。 DFS(I); VIS [i]は -。 LEN - =のSTRLEN(S [I]) - CNT1。 } } } } } } int型のmain() { scanf関数(" %のD "、&N) 以下のために(int型 i = 1 ; iが<= N; iは++ ) CINを >> S [i]は、 CIN >> S [ 0 ]。 DFS(0 )。 printf(" %dの" 、ANS)。 リターン 0 ; }