題目描述
石匠接到活,要把石頭分成指定重量的若干塊。這是一個體力活,消耗的體力和石頭重量有關。一斤的石頭要消耗1千焦的能量。比如這次僱主的要求是:一塊21斤的石頭,分成6,7,8斤重的3塊。
石匠可以這樣:先把石頭分成6+15,要消耗 21k的能量。再把15斤的石頭分成7,8斤的,要消耗15k的能量,那麼,一共要消耗:21+15 = 36 k能量。
石匠也可以這樣: 先把石頭分成8+13,要消耗 21k的能量。再把13斤的石頭分成6,7斤的,要消耗13k的能量,那麼,一共要消耗:21+13 = 34 k能量。
當石匠接到任務後,要怎麼做才能消耗最小能量呢?
輸入
第1行:1個整數N(2 <= N <= 50000):表示要分成的石塊個數
第2 - N + 1行:每行1個整數Li(1 <= Li <= 1000):表示分成塊後,每塊石頭的重量
輸出
輸出最小的體力消耗(以k焦爲單位)
樣例輸入
3
6
7
8
樣例輸出
34
時間限制: 1 Sec
內存限制: 128 MB
1.這道題想了很久,一開始是想着先把輸入的數據排序,然後先把大的石頭切下,但是後來發現這個思路錯了。
2.然後我又用深度搜索遍歷所有的分法,找出最小的,但是超時了。
3.然後我做了一些優化,先把數組排序,然後在深度搜索的時候直接從數組中間開始劃分,往後遍歷所有情況,但還是超時了。
最後我實在想不出如何優化了,請教各位大佬 QAQ