1. 程式人生 > >HihoCoder 1640 : 命名的煩惱(預處理)(好題)

HihoCoder 1640 : 命名的煩惱(預處理)(好題)

最短 很多 一位 提高 表示 合並 新的 最優 位數

描述

程序員常常需要給變量命名、給函數命名、給項目命名、給團隊命名…… 好的名字可以大大提高程序員的主觀能動性,所以很多程序員在起名時都會陷入糾結和煩惱。

小Hi希望給新的項目起個拉風的名字。他希望這個名字可以包含N個關鍵字,並且總長度最短。例如包含關鍵字abcd、cdab和dabc的最短字符串是cdabcd。

給定N個關鍵字,請你幫小Hi找到最短的包含所有關鍵字的字符串。輸出這個字符串的長度。

輸入

第一行包含一個整數N。(1 <= N <= 15)

以下N行每行包含一個只包含小寫字母的字符串。字符串長度不超過100。

輸出

輸出最短的長度。

樣例輸入

3  
abcd  
cdab  
dabc

樣例輸出

6

思路:DP,我們假設已經合並成字符串S,若把str加到末尾,不知道對齊哪一位最優,假設str長度為len,可能對其位數<len,也可能>=len,即覆蓋掉前面一個str’。

所以,需要我們預處理包含關系的字符串,刪去被包含的字符串,那麽就可以DP了。

具體的,dp[2^15][15]表示使用的哪些字符串,最後一個串是哪個,當然,前提是刪去了被包含的字符串。

HihoCoder 1640 : 命名的煩惱(預處理)(好題)