poj1011sticks题解

该博客介绍了如何通过深度优先搜索算法解决POJ1011sticks问题,即如何将一系列长度不超过50单位的木棍组合成尽可能少的原始木棍。博主详细讨论了搜索过程中的剪枝策略和恢复已使用标志的方法,以避免超时,并提供了C++实现代码。
摘要由CSDN通过智能技术生成

     题目要求将一系列的sticks重新组合,形成若干相等相等长度的木棒,且尽量使木棒长度最小,如果数据量比较小的话,就纯粹是搜索了,但题目要求的 sticks可能达到64根,如果纯粹的搜索则显然是会远远超过1000ms的,因而也就把剪枝放在了很重要的位置。从第一根stick开始,寻找下一根 stick使两者的长度小于等于木棒的长度,然后再寻找下一根stick,直到和为一根木棒的长度;然后又从一根没有被使用的stick开始进行下一根木棒的组合。概括一点说,就是一个深度优先搜索。
     算法很清晰,然而真正写起来却有不少要注意的地方.

     1.首先是used[]的恢复,当某一步搜索走不通的时候,不能忘记将used[i]置为false.

     2.其次是剪枝的采用,当第i步时,剩余最大的sticks[i]等于restLen时,继续搜索还是走不通的话,那么这一步取sticks[j],j>i也不会成功,所以此时返回false就行了。不然的话,会超时的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值