第一?/p>
共四?/p>
NOIP 2003
普及组试题《栈的计数》解题报?/p>
编者按?/p>
本文十分详细的介绍了《栈的计数?/p>
这题的两种递推算法,图文并茂,
十分适合初学?/p>
阅读,并从中领会清晰、严密的分析思路。另外,随文附带的程序十分简洁,值得学习?/p>
作为普及组的试题?/p>
出题者的意图可能仅仅希望考察选手对搜索和递推算法的掌握,
?/p>
是,本题作为组合数学
Catalan
数的经典模型,可以用组合数学的方法快捷高效的求解。类
似的利用
Catalan
数求解的问题?/p>
NOI2001
福建组队赛《球迷购票问题》等,类似的递推?/p>
题还?/p>
NOI2000
福建组队赛《车皮排序问题》等,希望有能力的同学继续研究?/p>
摘要?/p>
算法一
算法?/p>
算法?/p>
算法
递推
递推
Catalan
?/p>
时间复杂?/p>
O(n
2
)
O(n
2
)
O(n)
空间复杂?/p>
O(n)
O(n
2
)
O(1)
问题转述?/p>
求一列共
n
辆的火车按顺序通过一个栈所产生的排列总数?/p>
分析?/p>
这一类组合计数题目显然不能用搜索的方法把所有可能的移动方案都穷举出来再统计
总数──这样做时间复杂度极大。这道题与经典的
HANOI
问题很相似,所以应当根据问?/p>
本身的性质,利用组合数学的原理,将原问题转化为递归形式,找到计算总数的递归方程?/p>
再进行计算?/p>
算法一?/p>
我们不妨直接?/p>
n
辆火车产生的排列总数?/p>
f(n)
。看看能不能找到一些规律?/p>
如图
,n
列火车通过?/p>
,
起始车头在车列最前端?/p>
经过移动?/p>
,
车头处在了第
a+1
?/p>
,
车头
前有
a
辆车
,
车头后有
b
辆车
(a>=0,b>=0)
。则
n=a+b+1,b=n-a-1
?/p>