宇宙蘑菇
留坑
宇宙蘑菇(mushroom)
【问题描述】
小m在宇宙中发现了一种奇怪的蘑菇,他每天都会固定分裂一次,长度为x的蘑菇回分裂成两个长度为x-1和x+1的蘑菇,但长度为0的蘑菇是不存在的,所以长度为1的蘑菇只能生成长度为2的蘑菇。
现在小m第一天有一个长度为2的蘑菇,他想知道第n天他有多少个蘑菇。
【文件输入】
一个整数n,意义同上。
【文件输出】
一个整数ans。
【样例输入】
4
【样例输出】
6
【数据范围】:
1 <= n <= 10000
粘自http://www.cnblogs.com/yuchenlin/p/sjtu_oj_3003.html
以下来证明为何ans就是C(n,[n/2])
首先,把那个三角形当做一个图来看,每一个点的数字表示的含义就是从顶点走到该点的路径的数目。
路径数目可以转换为序列数目,从定点0开始 向左为-1 向右为+1
所以路径的数目也就等价于
由-1和+1组成的,长度为n-1的,任意前k项和都大于等于-1的个数。
解释:
1.因为到第n天,一共经历了n-1次转换的过程。
2.如果任何时刻出现了序列前k项的和为-2,则表示该路径经过比-1(也就是第一个位置)还要左的地方,这是不允许的。
接下来进行分析一个无效序列的特点:
假设这个序列含有m个-1(有C(n-1,m)种摆放方法)
如果这n-1个数组成的序列是无效的,说明有一个最小的k使得前k项和为-2,
也就是有 [k/2]-1 个1 和 [k/2]+1个-1
如果我们把这k个数反向 也就是1变为-1 -1变为1 则得到了一个含有m-2个-1的序列
这种变换是一对一的(因为反向的特性) 所以换一种说法就是
在一个含有m个-1的序列的集合里,失效的序列的个数正好等于 由m-2个-1的序列组成的集合的大小
数学语言就是
C(n-1,m) - C(n-1,m-2)
而遍历m从0到[(n-1)/2]+1 = [n/2],求和。可以得到
Ans = C(n-1,0) + C(n-1,1) + [C(n-1,2)-C(n-1,0)]+[C(n-1,3)-C(n-1,1)] + [C(n-1,4)-C(n-1,2)] + ....+[C(n-1,[n/2])-C(n-1,[n/2]-2)]
化简得到
Ans = C(n-1,[n/2]-1) + C(n-1,[n/2])
= C(n,[n/2])