北京大学ACM国际大学生程序设计竞赛课件(1)
合集下载
国际大学生程序设计竞赛数论与算法.ppt
分析: 显然X1为分子,X2比为分母,其它数可以为分子
也可以为分母。
方法一:将分母X2分解质因数,由于 X2≤1000000000,所以质因数个数不超过29 个。逐一扫描X1,X3,X4…,Xk,看能否将 X2约掉。
方法二:还是逐一扫描X1,X3,X4…,Xk, 看能否将X2约掉,但不进行因数分解,而是 每次约掉它和X2的最大公约数。
数论基本知识
1。如何求出1~n中的所有素数? Eraosthenes氏筛法:每次求出一个新的素数,就把n以内的它的所有
倍数都筛去。 2。给出一个数n,如何判断它是不是素数? 1)朴素的判别法 从2开始试除小于n的所有自然数,时间复杂度为
O(n). 2) 如果a是n的因子,那么n/a也是n的因子,所以如果n有一个大于1
分析:把数字1,2,3,4从中抽出,然后把其他数 字按照原顺序排列组成的自然数w,w×10000整除 7取余有7种可能,即是0,1,2,3,4,5,6。如 果能把1,2,3,4排列出7个数,使它们整除7取余 的值分别为0,1,2,3,4,5,6,把这4位数接在 w后面即为问题的解。
除法表达式
题目:除法表达式有如下的形式:X1/X2/X3/…/Xk.其 中Xi是正整数且X≤1000 000 000(1≤i≤k,k≤10 000)。除法表达式应当按照从左到右的顺序计算。 可以在表达式中嵌入顺序。现在给一个除法表达式 E要求告诉是否可以通过增加括号使表达式为E‘,E’ 是整数。
扩展的欧几里德算法
如果(a,b)=d,那么一定存在x,y满足ax+by=d。
Function extended_gcd(a,b:longint; Var x,y:longint):longint;
Begin
if b=0 then begin
也可以为分母。
方法一:将分母X2分解质因数,由于 X2≤1000000000,所以质因数个数不超过29 个。逐一扫描X1,X3,X4…,Xk,看能否将 X2约掉。
方法二:还是逐一扫描X1,X3,X4…,Xk, 看能否将X2约掉,但不进行因数分解,而是 每次约掉它和X2的最大公约数。
数论基本知识
1。如何求出1~n中的所有素数? Eraosthenes氏筛法:每次求出一个新的素数,就把n以内的它的所有
倍数都筛去。 2。给出一个数n,如何判断它是不是素数? 1)朴素的判别法 从2开始试除小于n的所有自然数,时间复杂度为
O(n). 2) 如果a是n的因子,那么n/a也是n的因子,所以如果n有一个大于1
分析:把数字1,2,3,4从中抽出,然后把其他数 字按照原顺序排列组成的自然数w,w×10000整除 7取余有7种可能,即是0,1,2,3,4,5,6。如 果能把1,2,3,4排列出7个数,使它们整除7取余 的值分别为0,1,2,3,4,5,6,把这4位数接在 w后面即为问题的解。
除法表达式
题目:除法表达式有如下的形式:X1/X2/X3/…/Xk.其 中Xi是正整数且X≤1000 000 000(1≤i≤k,k≤10 000)。除法表达式应当按照从左到右的顺序计算。 可以在表达式中嵌入顺序。现在给一个除法表达式 E要求告诉是否可以通过增加括号使表达式为E‘,E’ 是整数。
扩展的欧几里德算法
如果(a,b)=d,那么一定存在x,y满足ax+by=d。
Function extended_gcd(a,b:longint; Var x,y:longint):longint;
Begin
if b=0 then begin
acm 程序设计 ppt课件
{ f(i,j)=
f(i-1,j-1)+1 (a[i]==b[j]) max(f(i-1,j),f(i,j-1)) (a[i]!=b[j])
由于f(i,j)只和f(i-1,j-1), f(i-1,j)和f(i,j-1)有 关, 而在计算f(i,j)时, 只要选择一个合适 的顺序, 就可以保证这三项都已经计算出 来了, 这样就可以计算出f(i,j). 这样一直 推到f(len(a),len(b))就得到所要求的解了.
29 2020/5/11
二、动态规划的基本步骤
动态规划算法通常用于求解具有某 种最优性质的问题。在这类问题中,可 能会有许多可行解。每一个解都对应于 一个值,我们希望找到具有最优值(最 大值或最小值)的那个解。设计一个动 态规划算法,通常可以按以下几个步骤 进行:
30 2020/5/11
(1)找出最优解的性质,并刻画其结构特征。 (2)递归地定义最优值。 (3)以自底向上的方式计算出最优值。 (4)根据计算最优值时得到的信息,构造一个
f[i] = max(f[i], f[j]+1) (1<=j<i,且Mice[i].W> Mice[j].W,Mice[i].S < Mice[j].S)
其中,初始条件为f[i]=1 (i=1, 2, ..., n)。
20 2020/5/11
Qestion:
两个问题有本 质区别吗?
21 2020/5/11
为(n-2)*2=4,而另外两条直线既可能平行也可能相交,因此可能交点
数为:
(n-2)*2+0=4 或者
(n-2)*2+1=5
4、 第四条直线不与任何一条直线平行,交点数为:
(n-3)*3+0=3 或者 (n-3)*3+2=5 或者 (n-3)*3+3=6
程序设计竞赛课件-PPT文档资料
ACM程序设计大赛
3
ACM程序设计大赛
4
ACM程序设计大赛
5
赛事等级
ACM/ICPC发展到目前已包括下列各等级的赛事 本地赛 各所大学选拔队伍的比赛 预赛 从各高校的代表队中选拔队伍参加区域赛 区域赛 在每年9至12月举行,选拔队伍参加世界总决赛 世界决赛 由来自世界各所高校的数十支队伍争夺世界总冠军
ACM程序设计大赛
5
如何比赛?
比赛形式
3人组队
6
1支队伍1台机器(提供打印服务) 上机编程解决问题(可以携带诸如书、手册、 程序清单等参考 资料;不能携带任何可用计算机处理的软件或数据、不能携 带任何类型的通讯工具) 实时测试,动态排名
试题
6-10题 全英文(可以带字典)
时间:持续5个小时;
ACM程序设计大赛
21
相关的知识
ACM程序设计大赛
22
ACM需要哪些数学知识
1、离散数学 作为计算机学科的基础,离散数学是竞赛中涉及最多的 数学分支,其重中之重又在于图论和组合数学,尤其是图论。 图论之所以运用最多是因为它的变化最多,而且可以轻易地 结合基本数据结构和许多算法的基本思想,较多用到的知识 包括连通性判断、DFS和BFS,关节点和关键路径、欧拉回 路、最小生成树、最短路径、差分约束、二部图匹配和网络 流等等。这部分的比重很大 ,往往也是竞赛中的难题所在。 竞赛中设计的组合计数问题大都需要用组合数学来解决,组 合数学中的知识相比于图论要简单一些,但有一部分知识要 先对代数结构中的群论有初步了解才能进行学习。
ACM程序设计大赛
OJ常见返回结果
9
如何排名?
首先根据解题数目进行排名。 如果多支队伍解题数量相同,则根据总用时加上惩罚时间进 行排名。 总用时和惩罚时间由每道解答正确的试题的用时加上惩罚时 间而成。 每道试题用时将从竞赛开始到试题解答被判定为正确为止, 其间每一次错误的运行将被加罚20分钟时间,未正确解答的 试题不记时。
ACM培训精品PPT课件
OLE (Output Limit Exceed) 输出超界 (一般 不太常见,除非你输出了超过 1024K ...)
DP (Dynamic Programming) 动态编程,动 态规划
DFS (Depth First Search) 深度优先搜索
BFS (Breadth First Search) 宽度/广度优先搜 索
输入输出
%d %lld %lf自动扫描前导空格 比如:读入5个整数到A[5]
输入文件中,数的排布是这个样子
35 26 78
99
206
不管它,直接5次%d
for ( int i = 0; i < 5; i++ ) scanf(“%d”, A + i);
%lld用于输入和输出长整数(long long,64位) %lf用于输入输出double
cout<<"j="; printf("%d\n", j); } return 0; }
0
1
j=0 j=1 j=2 j=3
2 3 4 j=j=j=j=j=
j=4
输入输出
scanf
输入格式
%d %lld %c %s %lf
对每种格式搞清楚一个重要问题
是否自动跳过前导空白?
什么是空白:空格,TAB,回车
输入输出
%s 读一个字符串,自动扫描前导空白,读到 空白结束
如: abcd efgh,将读出”abcd”
%c读一个字符,但是不扫描前导空白
如何读一个非空白字符呢?
比如,读取某人的信息,其性别用M/F表示
TopBoy M ComputerScience
Kitty
DP (Dynamic Programming) 动态编程,动 态规划
DFS (Depth First Search) 深度优先搜索
BFS (Breadth First Search) 宽度/广度优先搜 索
输入输出
%d %lld %lf自动扫描前导空格 比如:读入5个整数到A[5]
输入文件中,数的排布是这个样子
35 26 78
99
206
不管它,直接5次%d
for ( int i = 0; i < 5; i++ ) scanf(“%d”, A + i);
%lld用于输入和输出长整数(long long,64位) %lf用于输入输出double
cout<<"j="; printf("%d\n", j); } return 0; }
0
1
j=0 j=1 j=2 j=3
2 3 4 j=j=j=j=j=
j=4
输入输出
scanf
输入格式
%d %lld %c %s %lf
对每种格式搞清楚一个重要问题
是否自动跳过前导空白?
什么是空白:空格,TAB,回车
输入输出
%s 读一个字符串,自动扫描前导空白,读到 空白结束
如: abcd efgh,将读出”abcd”
%c读一个字符,但是不扫描前导空白
如何读一个非空白字符呢?
比如,读取某人的信息,其性别用M/F表示
TopBoy M ComputerScience
Kitty
ACM培训精品PPT课件
自己过滤空格?麻烦!
输入输出
读一个非空白字符, 方法一:
char str[2]; scanf(“%1s”, str); // %1s扫描前导空白,并且只读一个字符 char c = str[0]; 方法二: 强制扫描空白 在%前面加上一个空格表示“强制扫描前导空白” scanf(“ %c”, &ch); 前面那个读人物信息的完整scanf语句:
LCS (Longest Common Subsequence) 最长 公共子串
输入输出
C:
scanf printf
C++:
cin cout
速度快 格式容易控制
使用简单, 自动识别类型 格式控制较麻烦
数据规模较大时, 推荐(必须)使用scanf 以 避免超时(TLE)
输入输出
cout: 带缓冲输出 printf: 不带缓冲输出
Ctrl+Z 2.最好不要把C和C++的输入输出语句混着用,会造成一些莫名其妙的问题 3.我个人倾向于使用纯C的输入输出,因为方便且速度快。
关于重定向操作
当程序要输入的内容很多时,从文件读入的操作变得非常重 要,特别是需要调试时,这样可以避免你反复的从键盘敲入重
复的内容。
使用标准输入语句,可以使用重定向命令行
scanf(“%s %c %s”, name, &gender, ability);
输入输出
同理,我们也可以用其它字符来扫描其它类型 的无关输入
比如,输入年月日的信息
2007-08-03 scanf(“%d-%d-%d”, &y, &m, &d); 其它类似
浮点数的输入问题
为什么说while(in!=0.00)不合理呢? 如果不合理应该怎么判断!!
ACM 入门精品PPT课件
2020/10/21
10
如何排名?
首先根据解题数目进行排名。 如果多支队伍解题数量相同,则根据总用时加上惩
罚时间进行排名。 总用时和惩罚时间由每道解答正确的试题的用时加
上惩罚时间而成。 每道试题用时将从竞赛开始到试题解答被判定为正
确为止,其间每一次错误的运行将被加罚20分钟时 间,未正确解答的试题不记时。
州);
2020/10/21
7
ACM in XTU
2004年,第一次参加亚洲区预选赛(网络预赛) 2005~2011,每年10月左右——
湖南省第1~6届大学生程序设计竞赛 2004~2010,每年10~12月——
第29~35届ACM国际大学生程序设计竞赛 亚洲区预选赛
2020/10/21
8
预期赛事(今后每年)
校程序设计竞赛
个人编程能力的比拼 中文或者英文题目,考察编程基本功
2020/10/21
13
ACM队队员的基本原则
基本要求
人品好 愿意花时间在这项赛事上 有团队合作精神
能力要求
程序设计 英语科技文献阅读
数学
2020/10/21
14
开课目的
为湘大ACM代表队培养后备人才 提高分析问题和应用计算机编程解决
ACM
第一讲
ACM入门
(Introduction to ACM)
2020/10/21
2
第一部分
ACM简介
2020/10/21
What is ACM ?
ACM-(Association for Computing Machinery)
成立于计算机诞生次年,是目前计算 机学界中历史最悠久、最具权威性的 组织…
北京大学 acm程序设计 图论讲义
22
for (w=G->first(v); w<G->n(); w = G>next(v,w))
if (G->getMark(w) == UNVISITED) { G->setMark(w, VISITED); Q->enqueue(w); }
PostVisit(G, v); // Take action }}
Q Q
31
() ((1,1)) ((1,1) (2,3)) ((1,1) (2,4)) ((1,1) (2,4) (3.2))
Q Q
Q
32
() ((1,1)) ((1,1) (2,3)) ((1,1) (2,4)) ((1,1) (2,4) (3.2))
Q Q
33
Q () ((1,1)) ((1,1) (2,3)) ((1,1) (2,4)) ((1,1) (2,4) (3.2))
求解算法
穷举法 贪心法 深度/广度优先搜索
图和树的搜索 回溯法(深度优先)
递归
分治
动态规划法
55
谢谢!
56
49
动态规划法的思想
自底向上构造 在原问题的小子集中计算 每一步列出局部最优解,并用一张
表保留这些局部最优解,以避免重 复计算 子集越来越大,最终在问题的全集 上计算,所得出的就是整体最优 解。
50
Fib(1)=Fib(2)=1
Fibonacci数列 Fib(n)=Fib(n-1) + Fib (n-2)
23
八数码 深度优先搜索
1
23 184 765
2
c
3
283 164 75
283 14 765
for (w=G->first(v); w<G->n(); w = G>next(v,w))
if (G->getMark(w) == UNVISITED) { G->setMark(w, VISITED); Q->enqueue(w); }
PostVisit(G, v); // Take action }}
Q Q
31
() ((1,1)) ((1,1) (2,3)) ((1,1) (2,4)) ((1,1) (2,4) (3.2))
Q Q
Q
32
() ((1,1)) ((1,1) (2,3)) ((1,1) (2,4)) ((1,1) (2,4) (3.2))
Q Q
33
Q () ((1,1)) ((1,1) (2,3)) ((1,1) (2,4)) ((1,1) (2,4) (3.2))
求解算法
穷举法 贪心法 深度/广度优先搜索
图和树的搜索 回溯法(深度优先)
递归
分治
动态规划法
55
谢谢!
56
49
动态规划法的思想
自底向上构造 在原问题的小子集中计算 每一步列出局部最优解,并用一张
表保留这些局部最优解,以避免重 复计算 子集越来越大,最终在问题的全集 上计算,所得出的就是整体最优 解。
50
Fib(1)=Fib(2)=1
Fibonacci数列 Fib(n)=Fib(n-1) + Fib (n-2)
23
八数码 深度优先搜索
1
23 184 765
2
c
3
283 164 75
283 14 765
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
j+1
1,2,…,j
going up
可整理ppt
18
问题解答
▪ 根据递推公式可以生成两个数组up和 down数组,如下:
N=1 N=2 N=3 N=4
N=1 N=2 N=3 N=4
i=1 1
1
1i=1 0 2 0
0
i=2 0
0
1i=2 0 2 1
1
i=3 0
0
0i=3 0 2 0
1
i=4 0
0
0i=4 0 0 0
▪ 例:Fibonacci数
• F(0)=0; F(1)=1; F(n)=F(n-1)+F(n-2); • 递归: F(n-1)和F(n-2)分别求到底一次 • 动态规划:用数组将前n-1个数存起来,每次只
用一个加法 F[n] = F[n-1]+F[n-2] 即可。
可整理ppt
3
问题
A decorative fence 1037
可整理ppt
8
问题描述
样例输入: 2 21 33 样例输出: 12 231
可整理ppt
9
样例解释
2 1
2 1
3 2
1
3 2
1
3 2
1
可整理ppt
3 2
1
10
问题解答
▪ 问题分析 ▪ 对于长度为N的漂亮篱笆,其序列为:
• 以高度为1的木条开始的上升序列 • 以高度为2的木条开始的下降序列 • 以高度为2的木条开始的上升序列 • 以高度为3的木条开始的下降序列 • 以高度为3的木条开始的上升序列 • ……
• ……
可整理ppt
20
问题解答
这样就可以根据给出的序号C,判断它落 在哪一个序号区间,从而得知它的第 一根木条的高度,去除第一根木条, 余下的问题就是一个N-1难度的问题, 可以使用同样的方法求解,直到最后 一根木条的高度被确定,整个问题就 解决了。
可整理ppt
21
问题解答
这里需要注意的是,去掉第一根木条后, 余下的木条中比第一根木条高的木条 的高度要减一,才是完全的N-1难度问 题。
0
up
可整理ppt
down
19
问题解答
▪ 对于长度为N的漂亮篱笆,可以查表得到序 列:
• 以高度为1的木条开始的上升序列的个数n1 • 以高度为2的木条开始的下降序列的个数n2 • 以高度为2的木条开始的上升序列的个数n3 • 以高度为3的木条开始的下降序列的个数n4 • 以高度为3的木条开始的上升序列的个数n5
可整理ppt
22
动态规划小结
▪ 递推公式 ▪ 存储结构及内容定义 ▪ 计算顺序 ▪ 从存储结构中还原问题的解可整Fra bibliotekppt23
讨论
▪ Dividing 1014
可整理ppt
24
作业
▪ Dividing 1014 ▪ A decorative fence 1037 提高
可整理ppt
25
可整理ppt
4
问题的出处
▪ 中欧信息学奥林匹克竞赛
▪ 2002年6月30日-7月6日 ▪ 第一天: fence ▪ A decorative fence ▪ 时限: 1 s ▪ 内存: 1 MB
可整理ppt
5
问题描述
漂亮的篱笆定义如下:
▪ 篱笆由宽度相同,高度互不相同的木条组成
▪ 组成篱笆的木条高低相间,错落有致
出上升序列的个数,如下图:
可整理ppt
15
公式解释
N-i+1 N-i+1 i
i
i
i
i
i
i
x5
x1
x3
i
x2
x4
x6 x7
N+1
可整理ppt
16
公式解释
▪ 公式(3):在以j+1开始的下降序列中, 第2个木条的可能取值是1,…,j;以它开始 的序列是上升序列,如下图:
可整理ppt
17
公式解释
going down
▪ 篱笆的长度定义为组成篱笆的木条数目N,其中木 条的高度取值(不按排列顺序)分别为1,2,…, N。
▪ 把篱笆按其木条高度顺序记为:a1a2…aN,则可以 对篱笆进行字典排序,例如:
可整理ppt
6
问题描述
长度为 4 的漂亮篱笆排序为:
1
2
3
4
5
6
7
8
9 10
可整理ppt
7
问题描述
给定篱笆长度N和在该长度下的序号C,要求 给出第C中漂亮篱笆的形状。
表示长度为N的漂亮篱笆中以高度为i的
木条开始,呈下降趋势的篱笆的个数;
•令
T up N ,i
表示长度为N的漂亮篱笆中以高度为i的
木条开始,呈上升趋势的篱笆的个数;
• 则有公式:
可整理ppt
13
问题解答
T T up
down
N,i
N,N1i
可整理ppt
(1) (2) (3)
14
公式解释
▪ 公式(1):以1开始的下降序列为0个 ▪ 公式(2):可以由下降序列的个数推
问题求解与程序设计 第六讲 动态规划
李文新 2004.2 – 2004.6
可整理ppt
1
内容提要
▪ 3.27-4.3一周不上课做出题作业 ▪ 动态规划 ▪ A decorative fence - 1037 ▪ 动态规划小结 ▪ 讨论 – 1014
可整理ppt
2
动态规划
▪ 与递归程序相类,将对问题求解分解为对子 问题求解;不同之处在于把子问题的解存起 来,用空间换时间。
可整理ppt
11
问题解答
▪ 问题分析
• 如果能够确定上述每一种序列的个数,就可以确 定数字C落在哪个区间,从而确定其第一个木条 的高度;则此时问题简化成N-1规模的问题,依 照同样的方法可以确定第2个木条的高度,以此 类推,可以确定所有木条的高度。
可整理ppt
12
问题解答
▪ 递推公式
•
T 令
down N ,i
1,2,…,j
going up
可整理ppt
18
问题解答
▪ 根据递推公式可以生成两个数组up和 down数组,如下:
N=1 N=2 N=3 N=4
N=1 N=2 N=3 N=4
i=1 1
1
1i=1 0 2 0
0
i=2 0
0
1i=2 0 2 1
1
i=3 0
0
0i=3 0 2 0
1
i=4 0
0
0i=4 0 0 0
▪ 例:Fibonacci数
• F(0)=0; F(1)=1; F(n)=F(n-1)+F(n-2); • 递归: F(n-1)和F(n-2)分别求到底一次 • 动态规划:用数组将前n-1个数存起来,每次只
用一个加法 F[n] = F[n-1]+F[n-2] 即可。
可整理ppt
3
问题
A decorative fence 1037
可整理ppt
8
问题描述
样例输入: 2 21 33 样例输出: 12 231
可整理ppt
9
样例解释
2 1
2 1
3 2
1
3 2
1
3 2
1
可整理ppt
3 2
1
10
问题解答
▪ 问题分析 ▪ 对于长度为N的漂亮篱笆,其序列为:
• 以高度为1的木条开始的上升序列 • 以高度为2的木条开始的下降序列 • 以高度为2的木条开始的上升序列 • 以高度为3的木条开始的下降序列 • 以高度为3的木条开始的上升序列 • ……
• ……
可整理ppt
20
问题解答
这样就可以根据给出的序号C,判断它落 在哪一个序号区间,从而得知它的第 一根木条的高度,去除第一根木条, 余下的问题就是一个N-1难度的问题, 可以使用同样的方法求解,直到最后 一根木条的高度被确定,整个问题就 解决了。
可整理ppt
21
问题解答
这里需要注意的是,去掉第一根木条后, 余下的木条中比第一根木条高的木条 的高度要减一,才是完全的N-1难度问 题。
0
up
可整理ppt
down
19
问题解答
▪ 对于长度为N的漂亮篱笆,可以查表得到序 列:
• 以高度为1的木条开始的上升序列的个数n1 • 以高度为2的木条开始的下降序列的个数n2 • 以高度为2的木条开始的上升序列的个数n3 • 以高度为3的木条开始的下降序列的个数n4 • 以高度为3的木条开始的上升序列的个数n5
可整理ppt
22
动态规划小结
▪ 递推公式 ▪ 存储结构及内容定义 ▪ 计算顺序 ▪ 从存储结构中还原问题的解可整Fra bibliotekppt23
讨论
▪ Dividing 1014
可整理ppt
24
作业
▪ Dividing 1014 ▪ A decorative fence 1037 提高
可整理ppt
25
可整理ppt
4
问题的出处
▪ 中欧信息学奥林匹克竞赛
▪ 2002年6月30日-7月6日 ▪ 第一天: fence ▪ A decorative fence ▪ 时限: 1 s ▪ 内存: 1 MB
可整理ppt
5
问题描述
漂亮的篱笆定义如下:
▪ 篱笆由宽度相同,高度互不相同的木条组成
▪ 组成篱笆的木条高低相间,错落有致
出上升序列的个数,如下图:
可整理ppt
15
公式解释
N-i+1 N-i+1 i
i
i
i
i
i
i
x5
x1
x3
i
x2
x4
x6 x7
N+1
可整理ppt
16
公式解释
▪ 公式(3):在以j+1开始的下降序列中, 第2个木条的可能取值是1,…,j;以它开始 的序列是上升序列,如下图:
可整理ppt
17
公式解释
going down
▪ 篱笆的长度定义为组成篱笆的木条数目N,其中木 条的高度取值(不按排列顺序)分别为1,2,…, N。
▪ 把篱笆按其木条高度顺序记为:a1a2…aN,则可以 对篱笆进行字典排序,例如:
可整理ppt
6
问题描述
长度为 4 的漂亮篱笆排序为:
1
2
3
4
5
6
7
8
9 10
可整理ppt
7
问题描述
给定篱笆长度N和在该长度下的序号C,要求 给出第C中漂亮篱笆的形状。
表示长度为N的漂亮篱笆中以高度为i的
木条开始,呈下降趋势的篱笆的个数;
•令
T up N ,i
表示长度为N的漂亮篱笆中以高度为i的
木条开始,呈上升趋势的篱笆的个数;
• 则有公式:
可整理ppt
13
问题解答
T T up
down
N,i
N,N1i
可整理ppt
(1) (2) (3)
14
公式解释
▪ 公式(1):以1开始的下降序列为0个 ▪ 公式(2):可以由下降序列的个数推
问题求解与程序设计 第六讲 动态规划
李文新 2004.2 – 2004.6
可整理ppt
1
内容提要
▪ 3.27-4.3一周不上课做出题作业 ▪ 动态规划 ▪ A decorative fence - 1037 ▪ 动态规划小结 ▪ 讨论 – 1014
可整理ppt
2
动态规划
▪ 与递归程序相类,将对问题求解分解为对子 问题求解;不同之处在于把子问题的解存起 来,用空间换时间。
可整理ppt
11
问题解答
▪ 问题分析
• 如果能够确定上述每一种序列的个数,就可以确 定数字C落在哪个区间,从而确定其第一个木条 的高度;则此时问题简化成N-1规模的问题,依 照同样的方法可以确定第2个木条的高度,以此 类推,可以确定所有木条的高度。
可整理ppt
12
问题解答
▪ 递推公式
•
T 令
down N ,i