luogu1019 單詞接龍

2021-08-18 20:16:51 字數 1298 閱讀 9838

題目描述

單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲,現在我們已知一組單詞,且給定乙個開頭的字母,要求出以這個字母開頭的最長的「龍」(每個單詞都最多在「龍」中出現兩次),在兩個單詞相連時,其重合部分合為一部分,例如 beast和astonish,如果接成一條龍則變為beastonish,另外相鄰的兩部分不能存在包含關係,例如at 和 atide 間不能相連。

輸入輸出格式

輸入格式:

輸入的第一行為乙個單獨的整數n (n<=20)表示單詞數,以下n 行每行有乙個單詞,輸入的最後一行為乙個單個字元,表示「龍」開頭的字母。你可以假定以此字母開頭的「龍」一定存在.

輸出格式:

只需輸出以此字母開頭的最長的「龍」的長度

輸入輸出樣例

輸入樣例#1:

5 at

touch

cheat

choose

tact

a 輸出樣例#1:

23 (連成的「龍」為atoucheatactactouchoose)

這題當作考試然後爆0了!我感覺心態都**啦,大概太弱

後來 回家認真推導一下還是能過的

考試心態不好

因為存在做兩遍的情況 所以我們乾脆複製一下

然後我們每次從後面做,因為只是這個字母開頭,我們可能有多種情況,我們不妨都列舉下就好

我把他們的序號都記錄在a陣列中,方便以後使用

深搜的時候 就是簡單的搜尋,我看能匹配多少,然後答案我只加後面多出來的,避免重複

可以用樣例考慮下,然後最後返回值的時候加上我初始串的長度就好

#include

#include

char s[44][1100];int n,a[22],cnt;

inline

int max(int x,int y)

bool flag[44];

int f(int x)

if (flag1&&z!=len2) ans1=max(ans1,f(i)+len2-z);}}

}flag[x]=false;

return ans1;

}int main()++num;

for (int j=1;j<=len;++j) s[num][j]=s[i][j];

}//for (int i=1;i<=2*n;++i) printf("%s\n",s[i]+1);

ans=max(ans,f(2*n)+strlen(s[a[z]]+1));

}printf("%d",ans);

return

0;}

luogu1019 單詞接龍 深搜 單詞拼接

題目連線 該題是luogu試煉場的2 7 t2 題目大意 1 給出n,n個單詞,首尾有重複就可以拼接在一起,要求如下 2 每個單詞只能最多用2次,單詞之間不能完全包含。3 求 最大的拼接長度。解題思路 1 吃果果的深搜,關鍵是要處理好 單詞之間不能完全被包含 2 每個單詞可以用2次,記得哦 3細節請...

單詞接龍 洛谷 1019

題目描述 單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲,現在我們已知一組單詞,且給定乙個開頭的字母,要求出以這個字母開頭的最長的 龍 每個單詞都最多在 龍 中出現兩次 在兩個單詞相連時,其重合部分合為一部分,例如 beast和astonish,如果接成一條龍則變為beastonish,另外相鄰的...

P1019 單詞接龍

洛谷 單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲,現在我們已知一組單詞,且給定乙個開頭的字母,要求出以這個字母開頭的最長的 龍 每個單詞都最多在 龍 中出現兩次 在兩個單詞相連時,其重合部分合為一部分,例如 beast和astonish,如果接成一條龍則變為beastonish,另外相鄰的兩部...