剪枝是一种优化算法,通过剪掉不合理的搜索来减少搜索时间。
剪枝通常分为以下两类:
- 可行性剪枝
- 最优化剪枝
可行性剪枝:该方法判断继续搜索能否得出答案,如果不能直接回溯。
最优化剪枝:又称为上下界剪枝,是一种重要的搜索剪枝策略。它记录当前得到的最优值,如果当前结点已经无法产生比当前最优解更优的解时,可以提前回溯。
例题(小木棍):
题目描述
乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过50。
现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍和它们的长度。
给出每段小木棍的长度,编程帮他找出原始木棍的最小可能长度。
输入
输入文件共有二行。
第一行为一个单独的整数N表示砍过以后的小木棍的总数,其中N≤60。
第二行为N个用空个隔开的正整数,表示N根小木棍的长度。
输出
输出文件仅一行,表示要求的原始木棍的最小可能长度。
样例输入
9
5 2 1 5 2 1 5 2 1
样例输出6
分析:
最优性剪枝:
1、设所有木棍的长度和是sum,如果原长度不能够被sum整除,那么不成立
2、木棍原来