noip讲义2递推法详解.ppt

  1. 1、本文档共86页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
递推法 采用具体化、特殊化的方法寻找规律 练习1 练习2 练习3 练习4 Hanoi双塔问题 通过合理分步、恰当分类找出递推关系 登楼梯 错位排列 染色问题 传球问题 凸多边形划分 求路径总数 街道路径 过河卒 传球游戏 传球问题 整数划分 倒推法 骑士游历 乘火车 设有一个N*M(1=N=50,1=M=50)的街道,规定行人从A(1,1)出发,在街道上只能向东或北行走。 若在此街道中,设置一个矩形障碍区域(包括围住该区域的的街道)不让行人通行,如上图中用“*”表示的部分。此矩形障碍区域用2对顶点坐标给出,如上图中的2对顶点坐标为(2,2),(8,4),此时从A出发到达B的路径有两条。 现给出N、M,同时再给出此街道中的矩形障碍区域的2对顶点坐标(x1,y1),(x2,y2),请求出此时所有从A出发到达B的路径的条数。 由于在街上只能向东或北方向行走,因此要想达到坐标为(i,j)的顶点的话,必定要经过坐标为(i-1,j)的顶点或坐标为(i,j-1)的顶点,假设从起始顶点到达坐标为(i,j)的顶点的路径总数为a[i,j],则a[i,j]= a[i-1,j] +a[i,j-1]。因此我们可以采用逐行递推的方法来求出从起始顶点到达任意一个顶点的路径总数。 var n,m,i,j,x1,x2,y1,y2:integer; a:array[1..50,1..50] of longint; b:array[1..50,1..50] of boolean; begin readln(n,m);{行列要分清} readln(x1,y1,x2,y2); fillchar(a,sizeof(a),0) ; fillchar(b,sizeof(b),true); for i:=y1 to y2 do for j:=x1 to x2 do b[i,j]:=false; for i:=1 to m do begin if not(b[i,1]) then break ; a[i,1]:=1; end; for j:=1 to n do begin if not(b[1,j]) then break ; a[1,j]:=1; end; for i:=2 to m do for j:=2 to n do if b[i,j] then a[i,j]:=a[i-1,j]+a[i,j-1]; write(a[m,n]); end. 有可能障碍区域靠边 如输入 9 5 2 8 4 应输出 1 Var{加入高精度运算} n,m,i,j,x1,x2,y1,y2,k,g:integer; a:array[1..50,1..50,1..30] of longint; b:array[1..50,1..50] of boolean; begin readln(n,m); readln(x1,y1,x2,y2); fillchar(a,sizeof(a),0); fillchar(b,sizeof(b),true); for i:=y1 to y2 do for j:=x1 to x2 do b[i,j]:=false; for i:=1 to m do begin if not(b[i,1]) then break; a[i,1,1]:=1; end; for j:=1 to n do begin if not(b[1,j]) then break; a[1,j,1]:=1; end; for i:=2 to m do for j:=2 to n do if b[i,j] then begin g:=0; for k:=1 to 30 do begin a[i,j,k]:=a[i-1,j,k]+a[i,j-1,k]+g;

文档评论(0)

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

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

1亿VIP精品文档

相关文档