宇宙蘑菇

留坑

 

宇宙蘑菇(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])

posted @ 2015-10-14 19:44  Showson  阅读(417)  评论(0编辑  收藏  举报