- 118
- 0
- 约1.4万字
- 约 59页
- 2017-08-26 发布于云南
- 举报
例1:计算系数(NOIP2011day2) 【题目描述】给定一个多项式(ax+by)k,请求出多项式展开后xnym项的系数 【输入】共一行,包含5个整数,分别为a,b,k,n,m,每两个整数之间用一个空格隔开。 【输出】输出共1行,包含一个整数,表示所求的系数,这个系数可能很大,输出对10007 取模后的结果。 【输入输出样例】 factor.in factor.out 1 1 3 1 2 3 【数据范围】 对于 30%的数据,有0≤k≤10; 对于 50%的数据,有a = 1,b = 1; 对于 100%的数据,有0≤k≤1,000,0≤n, m≤k, 且n + m = k,0≤a,b≤1,000,000。 方法一 根据二项式定理可知: (ax+by)k= = 取i=n,xnym的系数为 其中an和bm可以用快速幂来计算,在lg(n)+lg(m)内完成。 计算 可以用递推来求解。 状态:f[i,j]表示从i个数中选j个数的方案数。f[k,n]就是答案。 根据第i数选还是不选来进行分析: 1.选择第i个数:此情况的方案数等价于从i-1个数中选择j-1个数的方案数即f[i-1,j-1]; 2.不选第i个数:此情况的方案数等价于从i-1个数中选择j个数的方案数即f[i-1,j] 所以f[i,j]=f[i-1,j-1]+f[i-1,j] 边界条件:f[i,0]=1,f[i,i]=1。 时间复杂度为O(n*k)。 方法二 首先要清楚一点对于(ax+by)k的展开式中任意一项,如果x的指数为n,则y的指数一定是k-n 对于不熟悉二项式定理的同学,可以这样来思考(ax+by)k=(ax+by)k-1*(ax+by) 定义f[i,j]表示(ax+by)j的展开式中xiyj-i的系数,f[i,j]有两种来源: 1. (ax+by)j-1的展开式中xiyj-i-1这一项与by相乘得到。即f[i,j-1]*b; 2. (ax+by)j-1的展开式中xi-1yj-i这一项与ax相乘得到。即f[i-1,j-1]*a; 所以f[i,j]=f[i,j-1]*b+f[i-1,j-1]*a 边界条件:f[1,1]=a mod 10007,f[0,1]=b mod 10007 时间复杂度为O(N*K)。 方法三 当k达到106的时候,方法一会超时。 由于10007是素数,在计算C(k,n)mod 10007时可以采用扩展GCD来解决。 时间复杂度为O(k)。 例2:汉诺塔问题 汉诺塔由编号为1到n大小不同的圆盘和三根柱子a,b,c组成。开始时,这n个圆盘由大到小依次套在a柱上,如图所示。要求把a柱上n个圆盘按下述规则移到c柱上: (1)一次只能移一个圆盘,它必须位于某个柱子的顶部; (2)圆盘只能在三个柱上存放; (3)任何时刻不允许大盘压小盘。 将这n个盘子从a柱移动到c柱上,最少需要移动多少次? 分析 状态:f[i]表示把i个盘子从a柱经过b柱移到c柱所需最少次数。 如果i=1,直接从a柱移到c柱即可,次数为1; 如果i1,最少移动次数的方法为: 第1步:先把a柱上面的i-1个盘子从a柱经过c柱移到b柱; 第2步:把i号盘子从a柱直接移到c柱; 第3步:把i-1个盘子从b柱经过a柱移到c柱。 上述第1步和第3步中的问题的移动次数都等于f[i-1],递推关系式如下: 1 i=1 f[i]= 2*f[i-1]+1 i1 答案为f[n],时间复杂度为O(n)。 例3:骨牌覆盖问题 有2行n列的长方形方格,要求用n个1*2的骨牌铺满。有多少种铺法? 如n=3时有以下3种覆盖方法: 方法一 状态:f[i]表示铺满2*i的长方形的方案数 找规律,手工或搜索求出i=1,2,3,4,5的方案数分别为1,2,3,5,8,容易发现 f[i]=f[i-1]+f[i-2](i=3) 边界条件:f[1]=1,f[2]=2 递推关系式 1 i=1 f[i]=
您可能关注的文档
最近下载
- 部编版语文五年级下册第一单元教材解读大单元集体备课.pptx VIP
- 车工 (数控车床)理论知识考核要素细目表四级.pdf VIP
- 本科课程《基础护理学》教案,第十二章给药.doc VIP
- 农村题材小品剧本村官.pdf VIP
- 小品剧本-小品《绰号》.docx VIP
- 小品剧本-小品《竞选》.docx VIP
- 本科课程基础护理学教给药教案(2025—2026学年).docx VIP
- LaserjetCP1025系列打印机打印质量故障排除手册.pdf VIP
- 年会小品剧本小品剧本:搞笑小品剧本《都是喝酒惹事》台词大全.docx VIP
- 2026年高考全国II卷文科综合真题试卷(新课标卷)(+答案).docx VIP
原创力文档

文档评论(0)