求解一道算法题——石匠,自己写的总是运行超时

题目描述

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值