我無法快速解決此問題。我有一個迭代的O(M*N^2)
動態編程解決方案,但它似乎太慢了。將一行對象拆分爲
這裏的問題:
鑑於N
人物(無論是「A」或「B」)在一條線上,我們嘗試把多達M
非重疊雨傘上空字符,這樣,在所有的遮陽傘覆蓋所有人物。有兩種類型的雨傘:「傘」和「傘」。放置在範圍[i,j]
上的「a」傘的分數等於該範圍中「a」字符的數量。 「b」傘以相似的方式運行。當從左向右讀,雨傘必須型交替(這是顯而易見的,因爲可以只結合相同類型的相鄰雨傘。)
例如,如果N=8
和M=2
和字符是abaabbab
則最優解將從[0,3]
和[4,7]
的「b」傘放置一把「a」傘。
我的解決辦法是DP,其中maxscore(index, used, type)
是覆蓋0...index
與used
傘,隨着最後傘是type
類型的最大比分。有N*M*2
狀態和O(N)
轉換(考慮前一傘的所有可能的結束),這使得它O(M*N^2)
和運行速度太慢。有更快的DP算法嗎?