P1278 單詞遊戲 深度優先 dfs

2021-10-08 18:32:38 字數 1314 閱讀 5636

題目描述

io和ao在玩乙個單詞遊戲。

他們輪流說出乙個僅包含母音字母的單詞,並且後乙個單詞的第乙個字母必須與前乙個單詞的最後乙個字母一致。

遊戲可以從任何乙個單詞開始。

任何單詞禁止說兩遍,遊戲中只能使用給定詞典中含有的單詞。

遊戲的複雜度定義為遊戲中所使用的單詞長度總和。

編寫程式,求出使用一本給定的詞典來玩這個遊戲所能達到的遊戲最大可能複雜度。

輸入格式

輸入檔案的第一行,表示乙個自然數n(1≤n≤16),n表示一本字典中包含的單詞數量以下的每一行包含字典中的乙個單詞,每乙個單詞是由字母a、e、i、o和u組成的乙個字串,每個單詞的長度將小於等於100,所有的單詞是不一樣的。

輸出格式

輸出檔案僅有一行,表示該遊戲的最大可能複雜度。

輸入輸出樣例

輸入 #1

5

iooiuuo

aioiooi

aooi

輸出 #1

16
題解

暴搜,**有詳細注釋,看**更好理解

#include

#include

#include

using

namespace std;

vector<

int> graph[20]

;string str[20]

;int n,ans,sum,len[20]

;int mark[20]

,use[20]

;void

dfs(

int point,

int step)

}int

main()

for(

int i=

0;i)for

(int j =

0; j < n; j++)if

(i!=j && str[i]

[len[i]-1

]== str[j][0

])// 若首尾可以連線,則把著兩條串聯絡起來

for(

int i=

0;i(!mark[i]

) sum -

= len[i]

;// 剔除所有串中和任意一條串都沒有聯絡的串

for(

int i=

0;i) cout << ans;

// 輸出結果

return0;

}

P1278 單詞遊戲

題目描述 io和ao在玩乙個單詞遊戲。他們輪流說出乙個僅包含母音字母的單詞,並且後乙個單詞的第乙個字母必須與前乙個單詞的最後乙個字母一致。遊戲可以從任何乙個單詞開始。任何單詞禁止說兩遍 遊戲中只能使用給定詞典中含有的單詞。遊戲的複雜度定義為遊戲中所使用的單詞長度總和。編寫程式,求出使用一本給定的詞典...

P1278 單詞遊戲

來自倉鼠老師的話 這題實際上就是帶權有向圖上點不重複的最長路徑。從理論上來說,應該是個np問題。就是把每一句話設為乙個點,然後可以 o n 2 的連邊,怎麼連邊就不說了吧。設dp i j 為當前走到 i 點,已走的狀態為 j 然後就可以愉快地進行狀壓dp。有乙個經驗性總結 列舉狀態的那一維一定要放在...

P1278 單詞遊戲

一道比較基礎的狀壓題,看到題解很多人都打的記搜,小蒟蒻來發個狀壓dp。由於不能多次使用同乙個單詞,對於每個單詞只有0 不選 1 選 兩種情況,並且n只有16顯然是狀壓了。對於每個單詞我們只關心首尾和長度,所以就記下每個單詞的首尾和長度。這題最簡單的點就是狀態很好設 f i j i為二進位制串表示用了...