原題鏈結
單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲。
現在我們已知一組單詞,且給定乙個開頭的字母,要求出以這個字母開頭的最長的「龍」,每個單詞最多被使用兩次。
在兩個單詞相連時,其重合部分合為一部分,例如 beast 和 astonish ,如果接成一條龍則變為 beastonish。
我們可以任意選擇重合部分的長度,但其長度必須大於等於1,且嚴格小於兩個串的長度,例如 at 和 atide 間不能相連。
輸入格式
輸入的第一行為乙個單獨的整數 n 表示單詞數,以下 n 行每行有乙個單詞(只含有大寫或小寫字母,長度不超過20),輸入的最後一行為乙個單個字元,表示「龍」開頭的字母。
你可以假定以此字母開頭的「龍」一定存在。
輸出格式
只需輸出以此字母開頭的最長的「龍」的長度。
資料範圍
n≤20
輸入樣例:5at
touch
cheat
choose
tact
a輸出樣例:
23提示
連成的「龍」為 atoucheatactactouchoose。
一道dfs的題目,要注意的是狀態是一整個整體,所以要回溯!
首先計算出,每個單詞前字尾重疊的最小單詞數,然後dfs一遍開頭的單詞
#include
#include
using
namespace std;
const
int n =25;
int n,ans,used[n]
,con[n]
[n];
string a[n]
;char head;
void
set(
)//計算每個單詞前字尾重疊最小單詞數,儲存在con陣列中}}
}}intdfs
(int cur,
int len)
//cur 當前單詞下標,len 當前拼接的長度}}
intmain()
題解 單詞接龍(DFS)
單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲,現在我們已知一組單詞 且給定乙個開頭的字母,要求出以這個字母開頭的最長的 龍 每個單詞都最多在 龍 現兩次 在兩個單詞相連時,其重合部分合為一部分,例如beast和astonish,如果接成一條龍則變為beastonish 另外相鄰的兩部分不能存在包...
CODEVS 1018 單詞接龍(DFS)
題目大意 題目描述 description 單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲,現在我們已知一組單詞,且給定乙個開頭的字母,要求出以這個字母開頭的最長的 龍 每個單詞都最多在 龍 中出現兩次 在兩個單詞相連時,其重合部分合為一部分,例如beast和astonish,如果接成一條龍則變為...
Codevs 1018 單詞接龍 (DFS)
題目描述 description 單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲,現在我們已知一組單詞,且給定乙個開頭的字母,要求出以這個字母開頭的最長的 龍 每個單詞都最多在 龍 中出現兩次 在兩個單詞相連時,其重合部分合為一部分,例如beast和astonish,如果接成一條龍則變為beast...