C++迭代加深——Addition Chains(ZOJ 1937)详解
引言
茕茕孑立,迭代加深。。。
题目描述
Addition Chains
已知一个数列 (其中 )。对于每个 ,需要满足 (,这里 与 可以相等)。
现给定 的值,要求 的最小值(并不要求输出),及这个数列每一项的值(可能存在多个数列,只输出任一个满足条件的就可以了)。
输入格式
多组数据,每行给定一个正整数 。
输入以 结束。
输出格式
对于每组数据,输出满足条件的长度最小的数列。
样例
样例输入
5 7 12 15 77 0
样例输出
1 2 4 5 1 2 4 6 7 1 2 4 8 12 1 2 4 5 10 15 1 2 4 8 9 17 34 68 77
n 小于等于 100
思路详解
一拿到这道好题,就可以知道,搜索!那该怎么搜?爆搜?非也,就要用到迭代加深
他既要搜索又要深度小,那么就用迭代加深,限制一个深度,如果不行,限制放大,一次一次的进行搜索
首先初始化 a[1] = 1 , a[2] = 2 , 然后要让一个 a[x] = a[i] + a[j] ,且最后一项为 n,项数又要最小
先用贪心思想,