ACM课件递推求解new

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ACM 程序设 计
计算机学院 刘春英
1 2019/10/27
今天,
你 了吗?
2 2019/10/27
每周一星(2):
水域浪子
3 2019/10/27
第三讲 递推求解
4 2019/10/27
先来看一个超级简单的例题:
有5人坐在一起,当问第5个人多少岁, 他说比第4个人大2岁,问第4个人多少 岁,他说比第3个人大2岁,依此下去, 问第一个人多少岁,他说他10岁,最 后求第5个人多少岁?
蟠桃记
8 2019/10/27
递推公式?
F(n)=(F(n-1)+1)*2
9 2019/10/27
Fibnacci 数列:
1n 0
fn


2n 1
fn1 fn2 n 2
即:1、2、3、5、8、13、21、34…
10 2019/10/27
思考:
递推公式的伟大意义——? 有了公式,人工计算的方法? 常见的编程实现方法?(优缺点?)
26 2019/10/27
再思考:
有1×n的一个长方形,用1×1、1×2、1×3的骨牌铺满方 格。例如当n=3时为1×3的方格,此时用1×1,1×2, 1×3的骨牌铺满方格,共有四种铺法。如图
输入 n(0<=n<=30
); 输出
铺法总数
27 2019/10/27
典型例题
仔细分析最后一个格的铺法,发 现无非是用1×1,1×2,1×3三种 铺法,很容易就可以得出:
37 2019/10/27
课后一定 要练习!
38 2019/10/27
Thank you!
See you next week.
39 2019/10/27
24 2019/10/27
得到如下递推公式:
基本形式:d[1]=0; d[2]=1 递归式:d[n]= (n-1)*( d[n-1] + d[n-2])
这就是著名的错排公式
25 2019/10/27
思考题(2046):
在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格, 例如n=3时,为2× 3方格,骨牌的铺放方案有三种(如图), 输入n ,输出铺放方案的总数
32 2019/10/27
附加思考题:
不容易系列之(3) —— LELE的RPG难题
有排成一行的n个方格,用红(Red)、粉 (Pink)、绿(Green)三色涂每个格子,每 格涂一色,要求任何相邻的方格不能同色 ,且首尾两格也不同色.求全部的满足要 求的涂法.
33 2019/10/27
附加思考题: 1480_钥匙计数之二
13 2019/10/27
太简单了? 来个稍微麻烦一些的
14 2019/10/27
例: (2050)折线分割平面
问题描述: 平面上有n条折线,问这些折线最多能将平面分 割成多少块?
样例输入 1 2 样例输出 2 7
15 2019/10/27
思考2分钟:如何解决?
16 2019/10/27
结论:
2.1、如果队列的前n-2个人是合法的队列,则显然 后面再加两个女生,也一定是合法的,这种情况有 F(n-2);
2.2、但是,难点在于,即使前面n-2个人不是合法 的队列,加上两个女生也有可能是合法的,当然, 这种长度为n-2的不合法队列,不合法的地方必须是 尾巴,就是说,这里说的长度是n-2的不合法串的形 式必须是“F(n-4)+男+女”,这种情况一共有F(n-4).
31 2019/10/27
结论:
所以,通过以上的分析,可以得到递推的通 项公式:
F(n)=F(n-1)+F(n-2)+F(n-4) (n>3)
然后就是对n<=3 的一些特殊情况的处理了, 显然:
F(0)=1 (没有人也是合法的,这个可以特殊 处理,就像0的阶乘定义为1一样) F(1)=1 F(2)=2 F(3)=4
仔细阅读,耐心品味,关键掌握从n-1到 n的推导过程。
35 2019/10/27
Any question?
36 2019/10/27
HDOJ作业:
1290 献给杭电五十周年校庆的礼物
1297 Children’s Queue 1438 钥匙计数之一 1465 不容易系列之一 1466 计算直线的交点数 1480 钥匙计数之二 2019 蟠桃记 2018 母牛的故事 2041 超级楼梯 2042 不容易系列之二 2044~2050 (10/5专题练习)
Zn = 2n ( 2n + 1 ) / 2 + 1 - 2n = 2 n^2 – n + 1
为什么?
17 2019/10/27
趁热打铁, 来个差不多的
18 2019/10/27
附加思考题(还没加到OJ): “佐罗”的烦恼
说起佐罗,大家首先想到的除了他脸上的面具, 恐怕还有他每次刻下的“Z”字。我们知道,一 个“Z”可以把平面分为2部分,两个“Z”可以把 平面分为12部分,那么,现在的问题是:如果 平面上有n个“Z”,平面最多可以分割为几部分 呢?
说明1:“Z”的两端应看成射线 说明2:“Z”的两条射线规定为平行的
19 2019/10/27
总结:递推求解的基本方法:
首先确认,是否能很容易的得到简单情 况的解
假设规模为N-1的情况已经得到解决
重点分析:当规模扩大到N时,如何枚举出所 有的情况,并且要确保对于每一种子情况都 能用已经得到的数据解决。
23 2019/10/27
分析思路:
1、当有N封信的时候,前面N-1封信可以有N-1或 者 N-2封错装
2、前者,对于每一种错装,可以从N-1封信中任 意取一封和第 N封错装,故=F(N-1) * (N-1)
3、后者简单,只能是没装错的那封信和第N封信 交换信封,没装错的那封信可以是前面N-1封 信中的任意一个,故= F(N-2) * (N-1)
1、如果n个人的合法队列的最后一个人是 男,则对前面n-1个人的队列没有任何限制, 他只要站在最后即可,所以,这种情况一 共有F(n-1);
30 2019/10/27
2、如果n个人的合法队列的最后一个人是女,则要 求队列的第n-1个人务必也是女生,这就是说,限定 了最后两个人必须都是女生,这又可以分两种情况:
f(n)=f(n-1)+f(n-2)+f(n-3); 其中f(1)=1,f(2)=2,f(3)=4
28 2019/10/27
最后一个思考题(有点难度):
Children’s Queue
用F(n)表示n个人的合法队列, 作如下分析:
按照最后一个人的性别分析,他要么是男, 要么是女,所以可以分两大类讨论:
一把钥匙有N个槽,2<N<26槽深为1,2,3, 4,5,6。每钥匙至少有3个不同的深度且相连的槽 其深度之差不得为5。求这样的钥匙的总数。
本题无输入
对2<N<26,输出满足要求的钥匙的总数。
34 2019/10/27
详见解题报告:
/forum/read.php?tid=2294&pa ge=1&toread=1
强调: 1、编程中的空间换时间的思想 2、并不一定是从N-1到N的分析
20 2019/10/27
思考题:平面分割方法
问题的提出: 设有n条封闭曲线画在平面上,而任何
两条封闭曲线恰好相交于两点,且任何三 条封闭曲线不相交于同一点,问这些封闭 曲线把平面分割成的区域个数。
21 2019/10/27
14 1
23
n=1 n=2
8 1
5
3
2
4
6
7
n=3
14
6
10 11 3 12 2
1 8
4
5
9 7 13n=4来自F(1)=2 F(n)=F(n-1)+2(n-1)
22 2019/10/27
1465 不容易系列之一
某人写了n封信和n个信封,如果 所有的信都装错了信封。求所有 的信都装错信封,共有多少种不同 情况。
如果所坐的不是5人而是n人,写出第n 个人的年龄表达式。
5 2019/10/27
显然可以得到如下公式:
10n1
f (n)
f (n1)2n2
化简后的公式: F(n)=10+(n-1)*2
6 2019/10/27
再来一个简单题:
7 2019/10/27
再来一个简单题:
11 2019/10/27
简单思考题:
在一个平面上有一个圆和n条直 线,这些直线中每一条在圆内 同其他直线相交,假设没有3条 直线相交于一点,试问这些直 线将圆分成多少区域。
12 2019/10/27
是不是这个——
F(1)=2; F(n) = F(n-1)+n;
化简后: F(n) = n(n+1)/2 +1;
相关文档
最新文档