给定一个正整数 A。目标是使用以下规则构建以 A 结尾的最短整数序列:
- 序列的第一个元素是 1
- 每个连续元素都是任何两个前面元素的总和(也允许将单个元素添加到自身)
- 每个元素都大于前面的所有元素;也就是说,序列是递增的。
例如,对于 A = 42,可能的解决方案是:
[1, 2, 3, 6, 12, 24, 30, 42]
A = 42 的另一种可能的解决方案是:
[1, 2, 4, 5, 8, 16, 21, 42]
读完问题陈述后,我首先想到的是动态规划(DP),因此我将其表达为搜索问题并尝试编写递归解决方案。
直到 A = 8 的搜索空间是:
1
|
2
/ \
/ \
3 4
/|\ /|\
/ | \ 5 6 8
/ | \
4 5 6
/| |\
5 6 7 8
我们可以看到 4 出现在两个地方,但在这两种情况下 4 的孩子都是不同的。在一种情况下,先验序列是 [1, 2, 4]。在另一种情况下,先验序列是 [1, 2, 3, 4]。因此,我们不能说我们有重叠的子问题。有没有办法将DP应用于上述问题?或者我判断可以使用DP解决它是错误的?