




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
A+B Problem题解综述牛人版【题目描述】 输入两个自然数,输出他们的和【输入数据】 两个自然数x和y(0=x,y=32767)【输出数据】 一个数,即x和y的和【思路】 此题考查动态规划思想首先我们需要把输入字符转换为数字a,b 然后使用动态规划求解A+B的值最后输出答案我们可以设计出如下DP方程令fj表示i+j的值 则有f00=0 fj=max fi-1j+1, fij-1+1由于对于每个i,j我们都要计算出fj,因此时间复杂度与空间复O(n2)但是 对于题目提供的最大数字n=32767明显超时!【优化1】 对于DP方程 由于每次计算只需要fi-1j或fj-1因此我们可以使用滚动数组优化DP的空间复杂度使用两个整数x,y分别保存fi-1j与fj-1空间复杂度降为O(2) 然而时间复杂度O(n2)仍然超时!“时间复杂度,到目前为止还没有更好的优化方法。因此,此题被称为史上最难的dp?”【优化2】 对于整数的运算 我们可以利用位运算的思想简化复杂度题目显然要我们求两非负整数之和。我们知道,在非负整数加法的二进制逻辑运算中,每一位上的结果取决于以下两方面:1、本位上两个逻辑位的异或值2、后一位的结果是否溢出利用这种性质,可以考虑如下做法:令fj表示,考虑两个加数的后i、j位相加的结果,显然有以下状态转移方程fj= maxfij-1+y & (1 (j-) fi-1j+x & (1 (i-1) 复制代码赋初值f00=(x & 1) (y & 1)两个循环变量i,j从1循环到log(2,maxint)我们成功的把时空复杂度降为O(log2n)利用滚动数组,可以进一步降低复杂度为O(2)至此,我们得到了一个较为圆满的解答【题目评价】 此题实质上非常复杂 全面考察到了数学史和计算机史 经典代数 常用计算与输入输出动态规划思想以及位运算思想等等等等知识点考虑到题目的所有可能性我们应当从计算机存储的二进制的角度来逐步考虑数的表示 以字节计数,采用多字节合用的方式表示一个大整数如今已经是高级程序语言编译器轻松可以达到的目标可是为了加强对计算机计数的了解 此题可以考虑仍以最原始的方式进行计算并且考虑最终将二进制数转变为十进制输出的全部过程期间还考察了对ASCII码的熟悉程度然而此题再VIJOS上的通过人数竟然高达59%可以看出VIJOS上大牛之多 不禁令人赞叹宋神牛用最小网络流program problem;varen,et,ec,eu,ep,ex:Array0.250000 of longint;dis:array0.1000 of longint;v:array0.1000 of boolean;i,j,k,n,m,w,cost,l:longint;a,b,ans,left,right:longint;function min(a,b:longint):longint;beginif ab thenmin:=aelsemin:=bend;procedure addedge(s,t,c,u,k:longint);begininc(l);enl:=ens;ens:=l;etl:=t;ecl:=c;eul:=u;epl:=l+k;end;procedure build(s,t,u,c:longint);beginaddedge(s,t,c,u,1);addedge(t,s,-c,0,-1);end;function aug(no,m:longint):longint;vari,d:longint;beginif no=n thenbegininc(cost,m*dis1);exit;end;vno:=true;i:=exno;while i0 dobeginif (eui0) and not veti and (diseti+eci=disno) thenbegind:=aug(eti,min(m,eui);if d0 thenbegindec(eui,d);inc(euepi,d);exno:=i;exit(d);end;end;i:=eni;end;exno:=i;exit(0);end;function modlabel:boolean;vard,i,j:longint;begind:=maxlongint;for i:=1 to n doif vi thenbeginj:=eni;while j0 dobeginif (euj0) and not vetj and (ecj-disi+disetj0 dofillchar(v,sizeof(v),0);until modlabel;work:=cost;end;function solve(x,d:longint):longint;vari,k,t,p,last,cost,lk:longint;beginfillchar(en,sizeof(en),0);fillchar(dis,sizeof(dis),0);k:=0;n:=2;t:=x;p:=0;while x0 dobegink:=k+x mod 10;x:=x div 10;inc(p);end;n:=1;x:=t;l:=k+p+1;last:=1;cost:=1;lk:=0;while x0 dobegink:=x mod 10;for i:=1 to k dobegininc(n);build(last,n,1,-cost);build(n,last+k+1,1,0);end;cost:=cost*10;inc(n);if last1 thenbeginif lkk thenbuild(1,last,k-lk,0);if klk thenbuild(last,n,lk-k,0);end;last:=n;x:=x div 10;if lk15000 dobeginans:=(left+right)shr 1;if solve(ans,b)a thenright:=anselseleft:=ans;end;for i:=left to right doif solve(i,b)=a thenbeginwriteln(i);halt;end;end.还有一位用什么一个PASCAL的面向对象的解法我怎么发现了一大堆的编译错误,不过上面那个提交可以AC的哦:vara,b,c:qword;function max(a,b:qword):qword;beginif ab thenexit(b)elseexit(a);end;operator :=(a:qword):b:qword;beginb:=0;if max(a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度智能节水灌溉系统建设项目合同协议书
- 一般货物运输合同模版及注意事项
- 2025年烟酒礼品定制及全国分销渠道合作协议
- 2025年意外险保单质押借款合同模板及实务应用
- 月光曲钢琴公开课教学方案
- 2025年度建筑行业钣金喷漆技术规范编制与实施合同
- 人体消化道医用无线内窥镜系统电磁兼容特性与优化策略研究
- 2025年旅游度假村环境美化与清洁管理服务条约生态优先
- (2025年标准)别墅继承协议书
- 2025年度有机蔬菜生产基地病虫害防治用药合作协议
- 2025年燃气电厂笔试题库及答案
- 2025年科技咨询师考试题库
- 2025年道路运输两类人员安全员考试考核试题库答案
- 2024-2025学年人教版七年级数学(下)期中试卷(考试范围:第7-9章)(含解析)
- 急性呼吸窘迫综合征护理
- 中小学班主任与心理健康教育教师专题培训课件
- 汉密尔顿焦虑量表HAMA(14项打印版)
- 渠道维护工试题
- 六级美术《唱大戏》课件
- 高中物理巩固练习牛顿第二定律基础
- DB21T 3515-2021 灌注式复合混凝土路面设计与施工技术规范
评论
0/150
提交评论