题目描述
石匠接到活,要把石头分成指定重量的若干块。这是一个体力活,消耗的体力和石头重量有关。一斤的石头要消耗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