摘要: 这道题是一道搜索题,不过貌似蛮经典的,网上的解题报告不少。 这道题可以逐个填充长棒,填完一根再填充下一根。 这里就只强调一下剪枝策略: 1. 排序,因为从大到小对棒子进行排序,先填充大棒子,以减少搜索空间; 2.所求棒的长度一定是总长度的一个约数; 3.当枚举到第n-1根棒子时,就不用枚举了; 4.设置标志数组,记录棒子是否被访问过; 5.去除长度相同的不可用的棒子; 暂时只能想到这几种剪枝策略,不过推荐一组数据:6440 40 30 35 35 26 15 40 40 40 40 40 40 40 40 40 40 40 40 40 4040 40 4... 阅读全文
posted @ 2012-04-27 23:26 LETTers 阅读(104) 评论(0) 推荐(0) 编辑
摘要: 这道题看着很简单,但确实有些出人意料的地方。 首先,这道题需要用这个式子去算: 然后,在计算过程中,用二分的思想,即Mn = Mn/2 * Mn/2,Mn/2 = Mn/4 * Mn/4,... 阅读全文
posted @ 2012-04-27 22:48 LETTers 阅读(116) 评论(0) 推荐(0) 编辑
摘要: 这个题等价于求将长度为2k的序列A = {1,2,...,2k}划分为两个长度为k的递增子序列B = {b1,b2,...,bk} 和 C = {c1,c2,...,ck},对任意i属于1到k满足bi < ci 的划分方式总数。 一个满足条件的划分等价于: 有两个栈,一个叫A,一个叫B,元素从小到大依次入栈,但是必须满足B栈的长度在任意时刻不小于A栈的长度。比如,如果有六个数1到6,则下图是一种入栈方式: 很明显,这是一个Catalan数了。View Code 1 #include <stdio.h> 2 const int MAX = 41; 3 long long num 阅读全文
posted @ 2012-04-27 22:23 LETTers 阅读(111) 评论(0) 推荐(0) 编辑