給出一個字符串,並且可以在字符串中更改至多Q個字母。您還會得到一個子字符串列表(每兩個字符長),並帶有相應的分數。字符串中的每個子字符串都會增加總分數。可獲得的最高分數是多少?更改字符串的字母以獲得最高分數
字符串長度< = 150,Q < = 100,子串<總數= 700
實施例:
字符串= bpdcg
Q = 2個
子串:
BZ - 得分:2
ZD - 得分:5
DM - 得分:7
納克 - 分數:10
在這個例子中,可以實現的最大得分b更改「字符串中的「p」改爲「z」,「c」改爲「n」。因此,新的字符串爲「bzdng」,它的得分爲2 + 5 + 10 = 17
我知道,鑑於已經有字母改爲一個字符串,比分可以在線性時間使用檢查字典匹配算法,如aho-corasick(或複雜程度稍差的Rabin Karp)。但是,嘗試每兩個字母替換將花費太長時間,然後檢查將花費太長時間。
我認爲是向後工作,從給定的子構建理想的字符串,然後檢查是否相差從原始字符串最多兩個字符另一種可能的方法。但是,我不確定如何做到這一點,即使可以完成,我認爲這也需要很長時間。
什麼是最好的方式去做這件事?
String和Q的最大長度是多少? – 2014-10-28 02:55:12
@PhamTrung該字符串最多可以包含150個字符,Q可以最大爲100 – 1110101001 2014-10-28 03:11:23
這看起來像一個揹包問題。 – 2014-10-28 04:13:26