【发布时间】:2019-01-14 01:23:18
【问题描述】:
Eli 是一个喜欢学习化学的少年。她最近加入了一家化学研究实验室。
博士。菲尔想让她玩弄一些化学物质并观察它们的反应。
因此,他给了她一排装有不同化学物质的试管托盘 并告诉她:
“将这些化学物质随意混合在一起,但你必须遵守两条规则:
切勿将两种化学品的管彼此相邻制成混合物。
继续向混合物中添加更多化学物质,直到它不违反新规则。”
例如,在图片中,您可以看到给了她 5 个试管,她可以在不违反规则的情况下制作 4 种不同的混合物:{1,3,5}、{2,4}、{2,5} , {1,4}。
但她不能混合 1 和 3 只是因为她仍然可以 在不违反规则的情况下添加5。
她很想知道有多少种不同的混合物 她可以在不违反规则的情况下做出任何 给定数量的管子。
这就是她问你的原因 写一段代码给她计算一下。
输入
输入将由一系列数字 N 组成,1 ≤ N ≤ 76。每个数字将位于 单独的线。
输入将被 0 终止。
输出
在不违反上述规则的情况下,输出她可以制作的不同混合物的数量 如示例中所示,在单行上方。所有子集的数量将小于 2^31
输入:
1 2 3 4 5 6 7 8输出:
0 0 1 3 4 5 7 9我是否可以使用 Mix[i] = Mix[i - 2] + Mix[i - 3] 之类的公式来找到答案,因为我注意到一个模式,所以我尝试使用这个公式,但是不能完全回答输入 4,5 和 6
【问题讨论】:
标签: algorithm dynamic-programming combinatorics discrete-mathematics