ACM程序设计-东北林业大学 acm05.pptVIP

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ACM程序设计 东北林业大学 陈宇 Lg_chenyu@ 今天你AC 了吗? 第6讲 DP入门 我校的ACM在线评测系统 课件下载地址: /kj/acm05.ppt 例1斐波那契数列 nefu 85 计算斐波那契数列的值!该数列为1 1 2 3 5 8 13 21 ......... 有多组数据,每组1行,用N表示,1 = N = 50。 输出Fibonacci(N)的值! 代码: int n; long long feibo[51]; feibo[1]=1; feibo[2]=1; for(int i=3;i=50;i++) feibo[i]=feibo[i-1]+feibo[i-2];//打表 while(cinn) coutfeibo[n]endl; 用递归能做吗? long long data[51]; long long fblq(int n) { if (n==1||n==2) return 1; else { if (data[n]==0) data[n]=fblq(n-1)+fblq(n-2); //看看这个! 只算1次! return data[n]; } } 现在同学们在纸上计算下题: 计算N! input 有多组数据,每组一行,用N表示,0 = N = 20; output 输出N! 递归的代码: #include cstdlib #include iostream using namespace std; long long data[21]; long long jc(int n) { if (n==0||n==1) return 1; if (data[n]==0) data[n]=n*jc(n-1); return data[n]; } 递推的代码: #include cstdlib #include iostream using namespace std; int main(int argc, char *argv[]) { int n; long long data[51]; memset(data,0,sizeof(data)); data[0]=1;data[1]=1; for(int i=2;i=20;i++) data[i]=i*data[i-1]; while(cinn) coutdata[n]endl; system(PAUSE); return EXIT_SUCCESS; } Nefu20 穿过街道 一个城市的街道布局如下:从最左下方走到最右上方,每次只能往上或往右走,一共有多少种走法? input 输入很多行行数,每行1个数字代表n的值,当n=0时结束(2=n=15) output 输出对应每行n值的走法. sample_input 1 2 10 5 0 sample_output 2 6 184756 252 递归的代码: int f[100][100]; int getf(int x,int y) { if (f[x][y]!=-1) return f[x][y]; int result; if (x==0||y==0) result=1; else result=getf(x-1,y)+getf(x,y-1); f[x][y]=result; return result; } Main() int main(int argc, char *argv[]) { int i,j,n; memset(f,-1,sizeof(f)); while(cinn) { if (n==0) break; coutgetf(n,n)endl; } system(PAUSE); return EXIT_SUCCESS; } 其实这题递推的代码更短: int n; long long data[21][21]; for(int i=0;i=20;i++) { data[i][0]=1;// 处理边界 data[0][i]=1;// 处理边界 } for(int j=1;j=20;j++) for(int k=1;k=20;k++)

文档评论(0)

nuvem + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档