我在過去遇到過這樣的一些類似的問題,我還沒有好的想法如何解決這個問題。問題如下:需要主意來解決這個算法的難題
給出一個大小爲n的正整數數組< = 1000和k < = n這是您必須將數組拆分成的連續子數的數量。您必須輸出最小值m,其中m = max {s [1],...,s [k]},s [i]是第i個子陣列的總和。示例:
Input: Output:
5 3 >> n = 5 k = 3 3
2 1 1 2 3
將數組拆分爲2 + 1 | 1 + 2 | 3將最小化米。
我的蠻力想法是讓第一個子陣列在位置i結束(對於所有可能的i),然後嘗試以儘可能最好的方式將k-1子陣列中的其餘數組拆分。但是,這是指數解決方案,將永遠不會工作。
所以我正在尋找好的想法來解決它。如果你有一個請告訴我。
感謝您的幫助。
回溯將得到你在那裏。 – Noldorin 2011-12-21 15:24:42
這是揹包問題的變種嗎? http://en.wikipedia.org/wiki/Knapsack_problem – BlueMonkMN 2011-12-21 17:26:42
@BlueMonkMN我認爲這個問題更容易。查看我的答案,我不使用動態編程。但是,我不完全確定這是有效還是更快。 – toto2 2011-12-21 17:29:47