题目描述:
任何一个分数都能才成若干个单位分数(形如 1 / a 1/a 1/a 的, a a a 是自然数)的和。
对于一个分数 a / b a/b a/b,表示方法有很多种,但是哪种最好呢?
首先,加数少的比加数多的好,其次,加数个数相同的,最小的分数越大越好,如果还是相同,那么第二小的分数越大越好,依次类推下去。
例如对于 19 / 45 19/45 19/45,下列方法都是合法的
19/45=1/3 + 1/12 + 1/180 19/45=1/3 + 1/15 + 1/45 19/45=1/3 + 1/18 + 1/30 19/45=1/4 + 1/6 + 1/180 19/45=1/5 + 1/6 + 1/18
但是最好的是最后一种,因为 1 / 18 1/18 1/18 比 1 / 180 1/180 1/180, 1 / 45 1/45 1/45, 1 / 30 1/30 1/30, 1 / 180 1/180 1/180 都大。
现在给出 a , b ( 0 < a < b < 1000 ) a,b(0<a<b<1000) a,b(0<a<b<1000),求最好的表达方式。
输入格式:
输入一行,用两个整数表示 a a a, b b b
输出格式:
若干个数,自小到大排列,依次是单位分数的分母
样例数据:
输入 19 45
样例输出 5 6 18
一道迭代加深的题
依旧是不断增加 d f s dfs dfs 的深度,对于每个深度都判断能否找到答案,能就输出,不然就继续 d f s dfs dfs
这里解释一些代码中的细节吧
对于一个分数 a / b a/b a/b,使得 1 / c ≤ a / b 1/c≤a/b 1/c≤a/b 的最小的 c c c 是 b / a + 1 b/a+1 b/a+1,所以要从 b / a + 1 b/a+1 b/a+1 开始枚举代码中的剪枝就是如果枚举到 i i i,后面的分数肯定都小于 1 / i 1/i 1/i,如果 ( h − d e p + 1 ) / i ≤ a / b (h-dep+1)/i≤a/b (h−dep+1)/i≤a/b,就肯定不行,直接 b r e a k break break