NOIP2000 單詞接龍

2021-07-10 20:52:06 字數 1863 閱讀 3447

題三.單詞接龍27分)

問題描述

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

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

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

輸入at

touch

cheat

choose

tacta輸出

23           (連成的「龍」為atoucheatactactouchoose)                                         

【思路】

回溯法。

可以離線求出j接在i之後的重疊部分c[i][j],這樣就可以把序列的尾巴u以及序列的長度len作為狀態搜尋,否則還要以string為狀態搜尋。

【**】

1 #include2 #include3

using

namespace

std;45

const

int maxn = 20+5;6

intn;

7int

c[maxn][maxn];

8int x[maxn],a[maxn]; //

標記//

序列 9

string

words[maxn];

10int

wordslen[maxn];

11int ans=0;12

13//

計算a前b後的重疊長度

14//

substr擷取字串

15int calc(string a,string

b) 22

return0;

23}2425

void dfs(int u,int

len) 32}

33int

main()

39for(int i=0;ifor(int j=0;j//

自己可能與自己重疊

40 c[i][j]=calc(words[i],words[j]);

41char ch; cin>>ch;

42for(int i=0;iif(words[i][0]==ch)

45 cout<46return0;

47 }

NOIP2000 單詞接龍

頹廢了一段時間,現在打算一遍學著數論基礎,一遍做著搜尋之類的題目提高 能力。這道題資料範圍小,是一道典型的搜尋題,但是對解題能力還是有一定要求的。注意是解題能力!我認為,他包括這幾部分 讀題懂題意,化歸到演算法模型上,編寫 處理好細節。讀懂題是解決題目的前提,有時解題時間長 出錯率高不是因為知識掌握...

NOIP2000提高組 單詞接龍

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

NOIP 2000 提高組 複賽 單詞接龍

noip 2000 提高組 複賽 單詞接龍 1.程式編寫過程中,發現接龍處的判斷編寫有誤,馬上著手修改。2.樣例通過,提交40分,錯了測試點1 4.輸入 1envelopee 輸出 154.上述測試點是挺經典的,不容易考慮到。envelope envelope 拼接成envelopenvelope ...