编程之美--------买票找零
2012-04-07 13:52
357 查看
转载于:http://hi.baidu.com/mortz/blog/item/0aa9bca4bf2f3cd47dd92ad1.html 在一场激烈的足球比赛开始之前,售票工作正在紧张的进行中。每张球票为50元。现有2n个人在买票。 其中n个人手持50元的钞票,另外n个人手持100元的钞票。假设开始售票的时,售票处没有零钱。 问这2n个人有多少种排队方式,不使售票处出现找不到零钱的局面? 不难看出,从队首开始,任何时候,只要手持100元的球迷总比手持50元的球迷少,肯定可以把钱找开。 此时,我们联想到括号的问题。50元相当于左括号,100元相当于右括号 第0个一定是左括号,假设第0个和第k个括号匹配。那么k一定是奇数。那么第1个符号到第k-1符号一定匹配。 第k+1个,到第2n-1个符号一定匹配。 假设我们设定f(2n)代表所有的合法序列的总数。 那么f(2n)=Sum(f(2i)*f(2n-2i-2)) i=0,1,........n-1; 所以最终f(2n)=1/n+1 * C(2*n , n) 解法二: 为了便于描述: 我们假设持有50元的球迷用1表示,0表示持有100元的球迷。 那么在2n个球迷的队列就对应着n个1和n个0的排列。如果序列的任意前k个项中1的个数都不少于0的个数,我们称这样的序列是合法的 显然合法序列和可行的解决方案一一对应。同时称n-1个1和n+1个0组成的序列为Sigma序列。 这样的序列共有C(2*n,n-1); 在一个非法序列中,存在某个k,使得序列前k个项中1的个数少于0的个数。即存k使得前k项中1的个数比0的个数刚好少1个,取其中 最小的k。将后2n-k项中的0换为1,1换为0.那么这是一个Sigma序列。所以,非法序列和sigma序列一一对应。 同理,sigma序列也可一映射到一个非法序列。所以非法序列和Sigma序列一一对应 非法序列的个数是C(2*n,n-1) 合法序列个数是C(2*n,n)-C(2*n,n-1)=1/(n+1) * C(2*n ,n) |
相关文章推荐
- 编程之美4.3 买票找零解法二
- 编程之美4.3买票找零
- 编程之美:第四章 数字之趣 4.3买票找零
- 从《编程之美》买票找零问题说起,娓娓道来卡特兰数——兼爬坑指南
- 从《编程之美》买票找零问题说起,娓娓道来卡特兰数——兼爬坑指南
- 从《编程之美》买票找零问题说起,娓娓道来卡特兰数——兼爬坑指南
- 从《编程之美》买票找零问题说起,娓娓道来卡特兰数——兼爬坑指南
- 从《编程之美》买票找零问题说起,娓娓道来卡特兰数——兼爬坑指南
- 从《编程之美》买票找零问题说起,娓娓道来卡特兰数——兼爬坑指南
- 关于《编程之美》的4.3 买票找零问题
- 编程之美4.3 买票找零
- 4.3 买票找零 卡特兰数
- 读书笔记之编程之美 - 4.3 买票找零 (太难了!)
- 买票找零问题
- 编程之美之买票找零
- 买票找零
- 买票找零
- 【动态规划】买票找零
- 买票找零问题——卡特兰数的应用
- 编程之美读书笔记:买票找零