寒假学习记录D29

题目描述
乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过50。现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍和它们的长度。给出每段小木棍的长度,编程帮他找出原始木棍的最小可能长度。

输入描述:
第一行为一个单独的整数N表示砍过以后的小木棍的总数。第二行为N个用空格隔开的正整数,表示N根小木棍的长度。

输出描述:
输出仅一行,表示要求的原始木棍的最小可能长度。
示例1
输入
9
5 2 1 5 2 1 5 2 1
输出
6
备注:
1<=N<=60

题目大意:
给出n个小木棍,你的任务是把他们拼接起来,还原原来的木棍,求拼接后每个小木棍的最小长度。

解题思路:
这个题注意一定要用搜索做而不是二分,之前做过一个拆分木棍的题是二分,因为那个题长度和拆分的数量有一个线性关系,而这个合并木棍并没有,我们用DFS+剪枝AC这个题,因为要求最小的长度,我们先将木棍排序,因为要求拼成的最小的长度,我们要从这些木棍最长的开始往上枚举,对每一个枚举的长度进行搜索,搜索的状态是(剩余木棍的个数,枚举的长度,当前拼成木棍剩余长度,和当前枚举的哪一根木棍)另外需要剪枝操作,剪枝有以下几点:

如果当前木棍是当去拼枚举长度的第一根,则需要剪掉,因为我们从最长的开始枚举,如果连第一个都拼不上,那么后面的肯定也拼不上。
如果当前木棍是当去拼枚举长度的最后一根,也需要剪掉,因为木棍是从大

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值