題目描述
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為二進位制串表示用了...