← 完整题目索引

PROJECT EULER · #0726

掉落的瓶子

Falling Bottles

仅题目 · 待解原题 ↗

考虑一堆酒瓶。堆栈中有 n 层,顶层仅包含一个瓶子,底层包含 n 个瓶子。对于 n=4,堆栈如下图所示。

每次拿走瓶子时都会发生塌陷过程。在堆栈中创建一个空间,并根据以下递归步骤填充该空间:

  • 没有瓶子从上方接触:什么也没有发生。例如,拿F
  • 一个瓶子从上方接触:它会下降以填充空间,从而形成另一个空间。例如,拿D
  • 两个瓶子从上方接触:其中一个会落下以填充空间,从而形成另一个空间。例如,收取 C

这个过程递归地发生;例如,取上图中的瓶子A。它的位置可以用 BC 填充。如果用 C 填充,则 C 创建的空间可以用 DE 填充。因此,如果采用 A,则可能会发生 3 种不同的折叠过程,尽管最终形状(在本例中)是相同的。

f(n) 定义为我们可以从 n 层的堆栈中取出所有瓶子的方法数。 如果在任何步骤中我们使用不同的瓶子或者折叠过程不同,则两种方法被认为是不同的。

给定 f(1)=1f(2)=6f(3)=1008

还定义 S(n)=k=1nf(k).

找到 S(104) 并以 1000000033 为模给出你的答案。

题解待补充

这道题的题目已收录,解题思路、代码和答案将在后续补充。