江苏省程序设计大赛.docxVIP

  1. 1、本文档共8页,可阅读全部内容。
  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 ICPC江苏省区比赛,但是去了那边变成了大学生程序设计大赛,去掉一个I的差别可很大。不过虽然不是International,不过难度也不少。今天就先分析其中一道题目:题目是英文的,这里我就把翻译好的给大家,翻译不好还请见谅给出一个正整数n(1=n=2001)。在n的左边可以放置另外一个数m,这样就组成一个新数mn,其中m必须小于等于n的一半。如果还有一个整数k=m/2,那么还可以继续组成一个新数kmn....比如有一个数12,你就可以在这个数左边放1~6,组成112,212.....612,接下来212又可以继续分成1212。在举一个例子n=8第一轮产生:18,28,38,48第二轮18:不能产生新数第三轮28:128第四轮38:138第五轮48:148,248第六轮128、138、148:不能产生新数第七轮248:1248第八轮1248:不能产生新数Input:输入一个数nOutput:一共产生了多少数?Input:8Output:10这道题目这一看之下有点像一个多叉树,第一次我想了一下,发现可以用递归做。因为我们可以看到当n=8时有4个新数,n=4时有2个新数,n=2时有一个新数,n=1时没有新数。代码如下:?1?double?GetResult(int?num)?2?{?3??if?(num2)?4??return?0;?5??else?6??{?7??int?i=0,j=num1;?8??double?sum=j;?9??for?(;i=j;i++)10??{11??sum+=GetResult(i);12??}13??return?sum;14??}15??递归的潜在效率损失的确很大,测100前还没有什么性能差别,但是测到400,500的时候和动态规划的性能差别已经很大了(这个是事后的测试了)。当时比赛提交以后被判为“超时”,这个结果已经是我料到的。当时浙江师范和复旦大学的队伍给了我很大的压力。好不容易清醒下来,重新看了下题目。想到一道北大上做过的题目“/JudgeOnline/problem?id=1579Function Run Fun”,这道题目一开始也是用递归做,结果超时,最后是用动态规划做出来的。?仔细研究题目时候,发现当n=0时有0个新数,当n=1时1个新数,当n=2时2个新数,当n=3时2个新数,当n=4时4个新数,当n=5时4个新数,当n=6时6个新数当n=7时6个新数,当n=8时10个新数。?打表之后发现n8=n1+n2+n3+n4+1=1+2+2+4+1=10n7=n1+n2+n3+1=1+2+2+1=6....n4=n1+n2+1=1+2+1=4 得到这个结论之后就能打表做了,开辟一个2002大小的double数组,初始化好之后直接访问就可以了。代码如下?1?double?Arr[2002]={0};?2?void?SetResultArr()?3?{?4??int?i=0,j;?5??Arr[0]=0;?6??Arr[1]=1;?7??Arr[2]=2;?8??Arr[3]=2;?9??for?(i=4;i=2002;i++)10??{11??for?(j=1;j=i1;j++)12??{13??Arr[i]+=Arr[j];14??}15??Arr[i]++;16??}17?? 利用打表的方法是空间换速度,直接寻址的速度还是非常可观的,最后这道题终于AC了这是我上周末周日参加程序大赛练习赛的第一题及其我用c++实现的解答。其余的题目我写完后会随后奉上。一些题目不是很难,只有课后习题的难度。不过要在五个小时内写好十题,还是相当有压力的……下面的代码经过我的初步检验应该是没什么问题的。至于代码简洁优良与否,望与大家共参之。欢迎大家来提些意见。第一题还是相当简单的一题,所以我才敢先把这题贴出来。————————————————-Problem ACatch That CowInput File:catchcow.inTime: 1s Memory: No LimitationsDescriptionFarmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N(0=N=100) on a number line and the cow is at a point K(0=K=100) on the same number line. Farmer John has two modes of transportation: walking and teleportin

文档评论(0)

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

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

1亿VIP精品文档

相关文档