网站大量收购独家精品文档,联系QQ:2885784924

c 递推算法详解_图文.ppt

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c 递推算法详解_图文

方法三 分析用1*2的骨牌覆盖列的位置来计算方案数 1.如果i为偶数,覆盖方案分为两类: (1)没有竖立覆盖其中一列的情况:全部用横向覆盖的方案,方案数为1; (2)有竖立覆盖的情况:为了避免重复,考虑第一次竖立覆盖的位置在x列,x必须是奇数,而且前1到x-1列覆盖方法唯一,全部采用横向覆盖,方案数等于后面i-x列的覆盖情况,即f[i-x]。 所以当i为偶数时,f[i]=1+f[1]+f[3]+...+f[i-3]+f[i-1] 2.如果i是奇数,一定有竖立覆盖的情况,f[i]=1+f[2]+f[4]+.....+f[i-3]+f[i-1] 如何证明该递推关系式等价于f[i]=f[i-1]+f[i-2]? 试着用横向覆盖的来分析递推关系式。 * 方法四 分治,一分为二来考虑,左边为n div 2列,右边为n-n div 2列,如果左右独立则方案数为f[n div 2]*f[n-n div 2],如果有横向覆盖第n div 2列和第n div 2+1列,则方案数为f[n div 2-1]*f[n-n div 2-1] 所以f[n]= f[n div 2]*f[n-n div 2]+f[n div 2-1]*f[n-n div 2-1] * 参考代码: #include fstream using namespace std; long long f[60]; ifstream fin(domino.in); ofstream fout(domino.out); int main() { int n,i; finn; f[1]=1; f[2]=2; for(i=3;i=n;i++) f[i]=f[i-1]+f[i-2]; foutf[n]endl; return 0; } * 本模板来源于网络,由第一课件网整理发布,免费分享给大家使用。 更多精彩PPT模板,请访问 使用时删除此备注即可。 配色方案修改: 配色方案在【格式】--【幻灯片设计】--【配色方案】--【编辑配色方案】下调整。 LOGO的添加: Logo添加修改在【视图】--【母版】--【幻灯片母版】下调整。直接选择logo图片删除或修改。 字体格式的设置: 括标题和文本格式的设置在【视图】--【母版】--【幻灯片母版】下调整。 递 推 算 法 * 确定状态 确定递推关系和边界条件 程序实现 * 例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)。 * 方法二 当k达到106的时候,方法一会超时。 由于10007是素数,在计算C(k,n)mod 10007时可以采用扩展GCD来解决。 时间复杂度为O(k)。 * 参考代码: #include iostream #include fstream using namespace st

您可能关注的文档

文档评论(0)

aena45 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档