5.简单问题和递推求解.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
#includestdio.h int main() { int n,m,i,j,sum,sum1,sum2; scanf(%d,n); for(i=0;in;i++) { scanf(%d,m); sum1=1; sum2=2; if(m==2) sum=sum1; if(m==3) sum=sum2; for(j=4;j=m;j++) { sum=sum1+sum2; sum1=sum2; sum2=sum; } printf(%d\n,sum); } return 1; } * 总结:递推求解的基本方法: 首先,确认:能否容易得到简单情况的解? 然后,假设:规模为N-1的情况已经得到解决。 最后,重点分析:当规模扩大到N时,如何枚举出所有的情况,并且要确保对于每一种子情况都能用已经得到的数据解决。 * HDOJ 2046:骨牌铺方格 在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数. Input:输入数据由多行组成,每行包含一个整数n,表示该测试实例的长方形方格的规格是2×n (0n=50)。 Output:对于每个测试实例,请输出铺放方案的总数,每个实例的输出占一行。 例如n=3时,为2× 3方格, 骨牌的铺放方案有三种, 如右图: * F(1)=1 F(2)=2 F(n)=F(n-1)+F(n-2) 为什么? 注意n=50结果的范围 * HDOJ 2045 LELE的RPG难题 有排成一行的n个方格,用红(Red)、粉(Pink)、绿(Green)三色涂每个格子,每格涂一色,要求任何相邻的方格不能同色,且首尾两格也不同色.求全部的满足要求的涂法. Input 输入数据包含多个测试实例,每个测试实例占一行,由一个整数N组成,(0n=50)。 Output 对于每个测试实例,请输出全部的满足要求的涂法,每个实例的输出占一行。 * 解题思路 递推嘛,f(1)=3,f(2)=6,f(3)=6 如果有n个方格,当对第n个方格填色时,有两种情况: 1)应该已经对前面n-1个方格填好了色,有f(n-1)种情况,此时第n-1个跟第一个颜色一定不一样,所以第n个只有一种选择。 2)对前面n-2个方格填好色,有f(n-2)种情况,第n-1个空格颜色跟第一个颜色一样(否则就成了上面那种情况了),只有一种可能,最后第n个方格可以填两种颜色(因为n-1和1是第同种颜色),所以是 2*f(n-2); 可以推出f(n)=f(n-1)+2*f(n-2),n=4; * 作业 课件中出现的题目 * 简单题目和递推求解 * HDOJ 1008 电梯 Problem Description:我们城市最高的建筑只有一部电梯。请求列表由N个正数组成,其中的正数表示按特定顺序电梯停留的层号,电梯上一层需要6秒,下一层需要4秒,每一次停留时间为5秒钟。 对每一个给出的请求列表,你需要计算完成请求列表需要的总运行时间,电梯最开始停留在0层且完成所有请求后不需要回到0层。 Input:输入有多个测试实例,每个实例包含一个正整数N,后面跟N个正整数,所有整数均小于100.N=0的输入表示输入结束且该行不需要处理。 Output:对每个输入实例输出一行表示总的处理时间。 Sample Input 1 2 3 2 3 1 0 Sample Output 17 41 * #includestdio.h int main() { int n,i,t,sum,cdeg,ddeg; while(scanf(%d,n),n!=0) { cdeg=0; sum=0; for(i=0;in;i++) { scanf(%d,ddeg); if(ddeg=cdeg) { sum+=(ddeg-cdeg)*6+5; cdeg=ddeg; } if(ddegcdeg) { sum+=(cdeg-ddeg)*4+5; cdeg=ddeg; } } printf(%d\n,sum); } return 1; } * 模拟法 问题难以找到规律或公式,只能按照一定步骤不停做下去,最终肯定能得到答案。 让计算机模拟人解决此问题的行为即可。 * HDOJ 1108 最小公倍数 Problem Description:给定两个正整数,计算这两个数的最小公倍数。 Input:输入包含多组测试数据,每组只有一行,包括两个不大于1000的正整数. Output:对于每个测试用例,给出这两个数的最小公倍数,每个实例输出一行。 10 14 70 * 欧几里德算法 又称辗转相除法,用

文档评论(0)

精品报告 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档