最新中华中学动态规划讲义
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
不是卒走一步马走一步。
【样例】
knight.in
knight.out
6633
பைடு நூலகம்
6
分析:本题可用搜索算法,但N,M=15就会超时 。 再分析题意会发现:要到达棋盘上的一个点,只能 从左边过来或是从上面过来。根据加法原理,到达 某一点的路径数目,就等于到达其相邻的上点和左 点的路径数目之和,因此我们可以使用逐列(或逐 行)递推的方法来求出从起点到终点的路径数目。 障碍点(马的控制点)也完全适用,只要将到达该 点的路径数目设置为0即可。
writeln(f4);readln;
end.
例4、棋盘上A点有一个过河卒,需要走到目标B点。
卒行走的规则:可以向下、或者向右。同时在棋盘
上C点有一个对方的马,该马所在的点和所有跳跃 一步可达的点称为对方马的控制点。因此称之为“马
拦过河卒”。棋盘用坐标表示,A点(0, 0)、B点(n,
m)(n, m为不超过15的整数),同样马的位置坐标是 需要给出的。现在要求你计算出卒从A点能够到达B 点的路径的条数,假设马的位置是固定不动的,并
次数,对于输入的n,输出An。
【输入】 输入文件hanoi.in为一个正整数n,表示
在A柱上放有2n个圆盘。
【输出】 输出文件hanoi.out仅一行,包含一个正
整数,为完成上述任务所需的最少移动次数An。
【输入输出样例1】
hanoi.in hanoi.out
1
2
问题分析:如果每个尺寸只有一个圆盘,共n个 圆盘,也就是常见的汉诺塔问题。则设hn为n 个盘子 从a柱移到c柱所需移动的盘次。显然,当n=1时,只 需把a 柱上的盘子直接移动到c柱就可以了,故h1=1
readln(n);s:= ① readln(x);{x:坏级,以0结束} while (x<>O)do begin
s:= ② readln(x); end; If (1 in s) then f1:=0 else fl:=1; If (2 in s) then f2:=0 else f2:= ③ If (3 in s) then f3:=0 else f3:=1+f1+f2;
例如: 当n=l时(无坏级情况下),仅有1种走法 n=2时(无坏级情况下),有:1级+l级 或 2级 共2种
走法 n=3时(第二级为坏级情况下),有:1级+2级,直接3
级, 共2种走法 【程序说明】用递推方法求解。用集合记录坏级
。
var x,i,n,fl,f2,f3,f4:longint;s:set of 0..30; begin
我们采取逆向思维的方法,从后往前推, 可用倒推法求解。
Var S,I:LongInt;
Begin S:=1;{第10天只有一个桃子} For I:=9 DownTo 1 Do S:=(S+1)*2;{第10天依次求前一天的
桃 Writeln(S); 子数}
End.
程序填空:设有一个n级的楼梯(1<=n<=12),编号 从下到上依次为1至n,其中有若干级为坏的。有 一个人上楼梯时一步可走1级、或2级、或3级( 坏级只能跨过不能踏上,但级数照算)。问:这个 人从楼下走到第n级,共有多少种不同的走法?
if n=1 then f4:=f1 else if n=2 then f4:=f2
else if n=3 then f4:=f3 else begin for i:=4 to n do begin if(i in s)then f4:=0 else f4:= ④ fl:=f2;f2:=f3;f3:=f4; end; end;
。 当n=2时,先将a柱上面的小盘子移动到b柱上去;然 后将大盘子从a柱移到c 柱;最后,将b柱上的小盘子 移到c柱上,共记3个盘次,故h2=3。以此类推,当a 柱上有n(n>=2)个盘子时,总是先借助c柱把上面的n1个盘子移动到b柱上,然后把a柱最下面的盘子移动 到c柱上;再借助a柱把b柱上的n-1个盘子移动到c柱 上;总共移动hn-1+1+hn-1个盘次。
2n个中间有空的圆盘,共有n个不同的尺寸,每个 尺寸都有两个相同的圆盘,注意这两个圆盘是不加 区分的(下图为n=3的情形)。现要将 这些国盘移到 C柱上,在移动过程中可放在B柱上暂存。要求: (1)每次只能移动一个圆盘; (2) A、B、C三根细柱上的圆盘都要保持上小下大的
顺序; 任务:设An为2n个圆盘完成上述任务所需的最少移动
中华中学动态规划讲义
介绍
动态规划是NOIP中非常重要的一类题型。 在动态规划中,算法是最难想到的,当你 想到了算法,实现也就迎刃而解。今天, 我们将强调算法的研究,不作上机实践
假设用二维数组yh存储,每行首尾元素都为1,且 其中任意一个非首尾元素yh[i,j]的值其实就是 yh[i-1,j-1]与yh[i-1,j]的和,另外每一行的 元素个数刚好等于行数。有了这些规律,给数 组元素赋值就不难了,而要打印杨晖三角形, 只需控制一下每行输出的起始位置即可。
例3、猴子第1天摘下若干个桃子,当即吃了一半 又一个。第2天又把剩下的桃吃了一半又一个,以 后每天都吃前一天剩下的桃子的一半又一个,到 第10天猴子想吃时,只剩下一个桃子。 问猴子第 1天一共摘了多少桃子?
问题分析: 已知条件第 10 天剩下 1 个桃子,隐含
条件每一次前一天的桃子个数等于后一天桃子的 个数加 1 的 2 倍。
{g[x,y]=1} {i>0,g[x,y]=0} {j>0,g[x,y]=0} {i>0,j>0,g[x,y]
递推边界为f[0,0]=1,考虑到最大情况下: n=20,m=20,路径条数可能会超出长整数范围所以要 使用Comp类型或高精度运算。
例5、(NOIP普及组第四题)给定A,B,C三根足够长的 细柱,在A柱上放有
假设用f[i,j]表示到达点(i,j)的路径数目,用 g[i,j]表示点(i,j)是否是对方马的控制点,g[i,j]=0表示 不是对方马的控制点,g[i,j]=1表示是对方马的控制 点。则,我们可以得到如下的递推关系式:
f[i,j]=0 f[i,0]=f[i-1,0] f[0,j]=f[0,j-1] f[i,j]=f[i-1,j]+f[I,j-1]