題目描述
單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲,現在我們已知一組單詞,且給定乙個開頭的字母,要求出以這個字母開頭的最長的「龍」(每個單詞都最多在「龍」中出現兩次),在兩個單詞相連時,其重合部分合為一部分,例如 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,另外相鄰的兩部...