poj1011Sticks】的更多相关文章

传说中的poj必做50题之中的一个-- 这是个传说中的搜索, 一開始以为, 仅仅要棒子加起来等于如果的原始长度, 那么这几根选择的棒子就不用管了, 结果卡在第一个例子-- 看了一下,发现, 代码把1,2,1,2合成一个棒子, 这样其它就凑不成3根长度为6的棒子了, 写了半天,发现思路错了, 这个问题不知道怎样解决. 參考了下面地址的结题报告: http://blog.csdn.net/lyy289065406/article/details/6647960 找到了一个解决的方法, 就是当合成了一…
深搜部分和之前的POJ2362差不多,只是有几处需要额外的剪枝. [思路]排序后从最短木棒开始搜索至木棒长总和,如果木棒长总和sum能整除当前棒长,则进入深搜. [剪枝]先前POJ2362的剪枝部分不再重提,这里只讲额外的几处(我们称切断后的棒为木棒,切断前的棒为原棒): 1.如果所有木棒等长,即排序后stick[0]=stick[n-1],则直接输出棒长: 2.如果当前搜索的棒长即是棒长总和,无需进入深搜子程序,直接输出: 3.如果深搜中当前长度的木棒不能选择,则略去同一层中相同长度的木棒:…
一.题目回顾 题目链接:Sticks 题意:给出一定数量的小木棒的长度,它是由等长的若干木棒随意砍断所得到的.对于给定的一组小木棒,请求出原始木棒的最小长度. 二.解题思路 DFS+剪枝 本题剪枝不到一定火候将会TLE,只有完成一定的剪枝才能AC 本题,我将从我做这题的角度,将所思所想具体记录下来,详细的官版思想见我另一个题解. 首先,看main函数: int main() { while(scanf("%d",&n) && n){ int sum=0; for…