程序设计方法——贪心算法PPT教学课件
合集下载
第4章 贪心算法 计算机算法设计与分析(第3版)教学PPT课件

11
4.2 贪心算法的基本要素 --贪心选择性质
贪心选择性质:指所求问题的整体最优解可以通过 一系列局部最优的选择,即贪心选择来达到。
与动态规划算法的区别: (1)是否依赖子问题 的解;(2)求解过程(自下向上还是自上向下)
判断问题是否所具此性质:对于一个具体问题, 要确定它是否具有贪心选择性质,必须证明每一步所作 的贪心选择最终导致问题的整体最优解。
12
4.2 贪心算法的基本要素 --最优子结构性质
当一个问题的最优解包含其子问题 的最优解时,称此问题具有最优子结构 性质。
13
4.2 贪心算法的基本要素
贪心算法与动态规划算法的差异
相同点:最优子结构性质 不同点:通过组合优化问题实例说明二者
差别。
14
4.2 贪心算法的基本要素
0-1背包问题:
第4章 贪心算法
1
• 学习要点 • 理解贪心算法的概念。 • 掌握贪心算法的基本要素 • (1)最优子结构性质 • (2)贪心选择性质 • 理解贪心算法与动态规划算法的差异 • 通过应用范例学习贪心设计策略。 • (1)活动安排问题; • (2)最优装载问题; • (3)单源最短路径; • (4)多机调度问题。
问题:要在所给的活动集合中选出最大的相容活动 子集合。
5
4.1 活动安排问题
下面给出解活动安排问题的贪心算法:
template<class Type>
void GreedySelector(int n, Type s[], Type f[], bool A[])
{ A[1]=true;
各活动的起始时间和结 束时间存储于数组s和f
问题描述
给定n种物品和一个背包。物品i的重量是Wi,其价值 为Vi,背包的容量为C。应如何选择装入背包的物品,使 得装入背包中物品的总价值最大?
4.2 贪心算法的基本要素 --贪心选择性质
贪心选择性质:指所求问题的整体最优解可以通过 一系列局部最优的选择,即贪心选择来达到。
与动态规划算法的区别: (1)是否依赖子问题 的解;(2)求解过程(自下向上还是自上向下)
判断问题是否所具此性质:对于一个具体问题, 要确定它是否具有贪心选择性质,必须证明每一步所作 的贪心选择最终导致问题的整体最优解。
12
4.2 贪心算法的基本要素 --最优子结构性质
当一个问题的最优解包含其子问题 的最优解时,称此问题具有最优子结构 性质。
13
4.2 贪心算法的基本要素
贪心算法与动态规划算法的差异
相同点:最优子结构性质 不同点:通过组合优化问题实例说明二者
差别。
14
4.2 贪心算法的基本要素
0-1背包问题:
第4章 贪心算法
1
• 学习要点 • 理解贪心算法的概念。 • 掌握贪心算法的基本要素 • (1)最优子结构性质 • (2)贪心选择性质 • 理解贪心算法与动态规划算法的差异 • 通过应用范例学习贪心设计策略。 • (1)活动安排问题; • (2)最优装载问题; • (3)单源最短路径; • (4)多机调度问题。
问题:要在所给的活动集合中选出最大的相容活动 子集合。
5
4.1 活动安排问题
下面给出解活动安排问题的贪心算法:
template<class Type>
void GreedySelector(int n, Type s[], Type f[], bool A[])
{ A[1]=true;
各活动的起始时间和结 束时间存储于数组s和f
问题描述
给定n种物品和一个背包。物品i的重量是Wi,其价值 为Vi,背包的容量为C。应如何选择装入背包的物品,使 得装入背包中物品的总价值最大?
贪心算法PPT学习课件

5
例8.2 一个买糖的孩子用1元钱买了不到1元钱的糖,售货 员找硬币时希望用最少个数的硬币。 售货员每增加一个硬币,使用的贪心规则是: 每次希望增加尽可能多的币值,又不能超出总数。 例如要找66c(分)。
● 假设硬币面值分别为:25c, 10c, 5c, 1c。
● 假设硬币面值分别为:20c, 16c, 10c, 1c。
3. MAKESET({v})
4. End for
5. T={}
6. While |T|<n-1
7. 令(x,y)为E中的下一条边
8. If FIND(x)≠FIND(y) then
heyichao@
26
9.
将(x,y)加入T
10.
UNION(x,y)
11. End if
12. End while
● 函数H-1(w)返回w在H中的位置 (注意堆由一个 数组H(1…n)来实现)。
heyichao@
18
● 运行时间主要取决于堆运算,这里共有n-1 个DELETEMIN运算,n-1个INSERT运算,最 多m-n+1个SIFTUP运算,每个堆运算用O(logn) 时间,得到总共需要O(mlogn)时间。
1. 对G的边以非降序权重排列。
2. 对于排序表中的每条边,如果现在把它放入T 不会形成回路的话,则把它加入到生成树T中;否 则将它丢弃。
见例8.3
heyichao@
24
Kruskal算法的实现
为有效地实现此算法,我们需要某种机制来检 测加入边后是否构成回路。为此需要确定一种数 据结构,让它在算法的每个时刻来表示森林,并 且在向T中添加边时动态检测是否有回路生成。
7
● 假设V={1,2,…,n}并且s=1。这个问题可以用一 种称为Dijkstra算法的贪心技术来解决。初始时, 将顶点分为两个集合X={1}和Y={2,3,…,n}。X包 含的顶点集合:从源点到这些顶点的距离已经确 定。
贪心算法PPT课件

且有||B’-{k}||>||B-{1}||,这与假设2°矛盾。 ▌
安排方案
f1
B
安排方案
fk
B’
…… 共j个活动
可能 相同 不存在
……
可能
如果 B’包 含这 个活, 则B 一定 包含
9
(2) 时间复杂度分析: 因为排序过程可以在O(nlogn)时间内完成,而求最优活动子 集的过程只需O(n)次比较,因此这个算法的时间复杂度为 O(nlogn)。 (3) 贪心策略设计算法的一般特点
·选Si最小的,这样可以增大场地的利用率; ·选fi最小的,使得下一个活动可以更早开始。
由于活动的占用时间长度没有限制,因此后一选择更合理。
6
为了在每一次选择时取当前可以安排的活动中最早结束的活动,应首先把 n项活动按结束时间的先后进行升序排序。即,使f1≤f2≤…≤fn,然后在Si值 不小于当前时刻的活动中取fi值最小者。 算法:
·算法的设计比较简单; ·算法一般比较快速; ·算法的正确性一般不明显,需要论证;如果正确性不能保 证,那么它往往可以得到近似最优解。
10
5.2 背包(Knapsack)问题
1. 问题描述
已知:n个(应为n种)物体{1,2,…,n}与一个背包。物体i的重量 (或体积)为Wi>0,价值为Pi>0(i=1,2,…,n),背包容量为 M>0。
计算机算法 ——设计与分析导论
刘璟
1
Chapter 5. 贪心(Greedy)技术
❖ 5.1 贪心策略的思想 ❖ 5.2 背包(Knapsack)问题 ❖ 5.3 Huffman编码 ❖ 5.4 多机调度问题的近似解法 ❖ 5.5 单源最短路径的Dijkstra算法
安排方案
f1
B
安排方案
fk
B’
…… 共j个活动
可能 相同 不存在
……
可能
如果 B’包 含这 个活, 则B 一定 包含
9
(2) 时间复杂度分析: 因为排序过程可以在O(nlogn)时间内完成,而求最优活动子 集的过程只需O(n)次比较,因此这个算法的时间复杂度为 O(nlogn)。 (3) 贪心策略设计算法的一般特点
·选Si最小的,这样可以增大场地的利用率; ·选fi最小的,使得下一个活动可以更早开始。
由于活动的占用时间长度没有限制,因此后一选择更合理。
6
为了在每一次选择时取当前可以安排的活动中最早结束的活动,应首先把 n项活动按结束时间的先后进行升序排序。即,使f1≤f2≤…≤fn,然后在Si值 不小于当前时刻的活动中取fi值最小者。 算法:
·算法的设计比较简单; ·算法一般比较快速; ·算法的正确性一般不明显,需要论证;如果正确性不能保 证,那么它往往可以得到近似最优解。
10
5.2 背包(Knapsack)问题
1. 问题描述
已知:n个(应为n种)物体{1,2,…,n}与一个背包。物体i的重量 (或体积)为Wi>0,价值为Pi>0(i=1,2,…,n),背包容量为 M>0。
计算机算法 ——设计与分析导论
刘璟
1
Chapter 5. 贪心(Greedy)技术
❖ 5.1 贪心策略的思想 ❖ 5.2 背包(Knapsack)问题 ❖ 5.3 Huffman编码 ❖ 5.4 多机调度问题的近似解法 ❖ 5.5 单源最短路径的Dijkstra算法
《算法设计与分析》第5章贪心法PPT课件

template<class Type>
void Loading(int x[], Type w[], Type c, int n)
{
int *t = new int [n+1];
Sort(w, t, n);
的重量为wi。
最优装载问题要求确定在装载体积不受限制的情况下,将
尽可能多的集装箱装上轮船。
2021/4/25
成都学院计算机系
-36-
最优装载问题可用贪心算法求解。采用重 量最轻者先装的贪心选择策略,可产生最优装 载问题的最优解。具体算法描述如下:
2021/4/25
成都学院计算机系
-37-
5.4.1 最优装载
} return s;
2021/4/25
成都学院计算机系
-16-
在初始状态下,解向量solution=φ,其中未 包含任何分量。使用最优度量标准,一次选择 一个分量,逐步形成解向量(x0,x1,…,xn-1).算 法执行过程中生成的向量(x0,x1,…,xk),k<n,称 为部分解向量或部分向量。
动态规划算法通常以自底向上的方式解各子问题,而贪 心算法则通常以自顶向下的方式进行,以迭代的方式作 出相继的贪心选择,每作一次贪心选择就将所求问题简 化为规模更小的子问题。
2021/4/25
成都学院计算机系
-13-
贪心算法的一般框架
GreedyAlgorithm (parameters) { 初始化; 重复执行以下的操作:
成都学院计算机系
-5-
若硬币面值改为:一角一分、五分和一分,而要 找给顾客一角五分钱。
用贪心算法将找给1个一角一分和4个一分的硬币。 然而,3个五分硬币是最好的找法。
贪心算法PPT学习课件

heyichao@
4
例 8.1
考虑分数背包问题,定义如下:给出n个大小为 s1,s2,…,sn,值为v1,v2,…,vn的项目,并设背包容量 为C,要找到非负实数x1,x2,…,xn, 使得
在约束
n
xivi
i 1
下最大。
n
xisi C
i 1
heyichao@
7. End while
● 算法结束时,顶点上的λ[ ]标记,就是该顶点 的δ[v],即从源点到该顶点的最短路经。
见例8.1
heyichao@
9
算法8.2 DIJKSTRA
Input: 含权有向图G=(V,E),V={1,2,…,n}
Output: G中顶点1到其他顶点的距离
15
算法8.2 SHORTESTPATH
INPUT:含权有向图G=(V,E),V={1,2,…,n}
OUTPUT:G中顶点1到其他顶点的距离。假
设已有一个空堆H。
1. Y V-{1}; λ[1] 0;key(1) λ[1]
2. For y 2 to n
heyichao@
6
8.2 最短路径问题
● 设G=(V,E)是一个每条边有非负长度的有向图, 有一个特异顶点s称为源。单源最短路径问题,或 者简称为最短路径问题,是确定从s到V中每一个 其他顶点的距离,这里从顶点s到顶点x的距离定义 为从s到x的最短路径的长度。
heyichao@
10. Y Y-{y} {将顶点y从Y中删除}
heyichao@
10
11. For 每条边(y,w) 12. If w∈Y and λ[y]+length[y,w]< λ[w] then
《贪心算法》PPT课件

{x1,x2,x3} {1,2/15,0} { 0,2/3,1} {0,1,1/2} {...}
n
wixi
20
i1
n
vixi
i1
20
20
...
31
...
[算法思路]1).将各物体按单位价值由高到低排序. 2).取价值最高者放入背包. 3).计算背包剩余空间. 4).在剩余物体中取价值最高者放入背包. 若背包剩余容量=0或物体全部装入背包为止
这种策略下的量度是已装入物品的累计效益值与所用 容量之比。
(v2/w2 , v3/w3 , v1/w1 )=(24/15,15/10, 25/18) 先装入重量为15的物品2,在装入重量为5的物品3, ∑pixi =24+15*5/10=31.5。此结果为最优解。
算法设计与分析 > 贪心算法
[例] n=3,c=20 (v1,v2,v3)=(25,24,15),(w1,w2,w3)=(18,15,10)
[常见应用]背包问题,最小生成树,最短路径,作业调度等等 [算法优点]求解速度快,时间复杂性有较低的阶. [算法缺点]需证明是最优解.
[适用问题] 具备贪心选择和最优子结构性质的最优化问题 贪心选择性质:整体的最优解可通过一系列局部最优解达到,即
贪心选择到达。
贪心算法通常以自顶向下的方式进行,以迭代的方式作出相
精选ppt13最优化描述找一个n元向量x44背包问题knapsackproblemmax问题描述设有n个物体和一个背包物体i的重量为w1装入背包则具有价值为v目标是找到一个方案使放入背包的物体总价值最高贪心算法精选ppt141652425121502028202312031011220315算法设计与分析贪心算法精选ppt151用贪心策略求解背包问题时首先要选出最优的度量标准
算法设计技巧与分析 第8章 贪心算法PPT课件

UNION (x,y)
11. end if
12. end while
Time Complexity
第1步:Ο(m log m) 第2步:Θ(n) While循环:
第7步: Θ(n) 第8步: Ο(m) 第10步:Θ(n)
算法时间:Ο(m log m)
在一个具有 m 条边的含权无向图中,算
11.
y ← DELETEMIN(H)
12. T ← T ∪ {(y,N[y])} {将边(y,N[y])到T}
13. Y ← Y – {y}
{从 Y 删除顶点 y}
14. for 每个邻接于 y 的顶点 w Y
15.
if c[y,w] < key[w] then
16.
N[w] ← y
17.
key[w] ← c[y,w]
将顶点分为两个集合X和Y,其中X包含的是 距离已经确定的顶点,令λ(y)为Y中顶点y只经 过X中顶点的最短路径的长度,则
1.初始时X={1},Y={2,3,…,n}; 2.从Y中选定距离已经确定的顶点y,将其移至X; 3.更新Y中与y相邻的其他顶点的标记; 4.迭代直至Y为空。
Example
Prefix Restriction
一个字符的编码必须不能是另一个字符编码 的前缀。
例如:若字符a的编码是01,则b就不能编码为 010,否则当遇到01时,无法判断。
当满足前缀约束条件时,变长编码不再有二 义性。
Huffman Code
基本原理:
总是选择频度最小的两个节点ci和cj构建一个新 节点c,c为ci和cj的父节点,其频度为两个子 节点的频度和。
假设我们已有一个空堆。
1. T ← {}; Y ← V - {1}
简单的贪心算法pptPPT课件

问题的整体最优解 中包含着它子问题 的最优解
【常见应用】背包问题,最小生成树,最短路径,作业调度等等 【算法优点】求解速度快,时间复杂性有较低的阶. 【算法缺点】需证明是最优解.
02.08.2021
编辑版pppt
9
ﻻ常见应用
1、活动安排问题
【问题陈述】设有n个活动E={1,2,…,n}要使用同一资源,同一时间内 只允许一个活动使用该资源. 设活动i的起止时间区间[si, fi) ,如果选
02.08.2021
编辑版pppt
10
ﻻ常见应用
活动安排问题贪心算法: void GreedySelector(int n, Type s[], Type f[], bool A[]) {
A[1]=true; int j=1; for (int i=2;i<=n;i++) {
if (s[i]>=f[j]) { A[i]=true; j=i; }
else A[i]=false; } }
02.08.2021
编辑版pppt
11
ﻻ常见应用
2、多机调度问题
多机调度问题要求给出一种作业调度方案,使所给的n 个作业在尽可能短的时间内由m台机器加工处理完成。
约定,每个作业均可在任何一台机器上加工处理,但未完 工前不允许中断处理。作业不能拆分成更小的子作业。
体上考虑并不一定是最优解;
(2)贪心算法只能用来求某些最大或最小解的 问题;
(3)贪心算法只能确定某些问题的可行性范围
。
因此,贪心算法具有局限性,并不是总能得到最优
解。 02.08.2021
编辑版pppt
16
谢谢观 看!!!
02.08.2021
《贪婪算法》PPT课件

将问题分成子问题来做,从某一集合中选出子集, 进行逐项的测试比较逐步达到整个解,通过逐步逼 近最优解而最终得到满足条件的解
自底向上,利用中间结果,迅速构造问题的解空间 树,以空间换时间
示例:Floyd(多源点最短路径)算法
特点:能够得到最优解
多步判断+最优子结构性质
2020/11/3
5
回溯算法的特点
for (i = 1; i <= n; i++)
2020/11/3
35
几种贪婪策略(续2)
价值密度准则:定义pi/wi,从剩余的物品中,挑选可以装入背包的价值密度 最大的物品
例如:n=2, w=[10,20], p=[5,100], c=25 直觉上接近最优解,作为一个启发算法 启发式贪婪算法,不能保证得到最优解
2020/11/3
36
改进算法
{2,4}, x=[0,1,0,1], p=23, 最优解
{3,4}, 不可能!
2020/11/3
39
3、应用3:拓扑排序
拓扑排序:由某个集合上一个偏序关系得到一个全序关系
2020/11/3
40
算法思想
1
3
1. 在有序图上选取 一个没有前驱的顶点
6 并输出
4
2. 从该图中删除该顶
点以及所有以它为弧
bool swapped = false; // no swaps so far
for (int i = 0; i < n - 1; i++)
template<class T> if (*table[i] > *table[i+1]I)nd{irectList<T>&
自底向上,利用中间结果,迅速构造问题的解空间 树,以空间换时间
示例:Floyd(多源点最短路径)算法
特点:能够得到最优解
多步判断+最优子结构性质
2020/11/3
5
回溯算法的特点
for (i = 1; i <= n; i++)
2020/11/3
35
几种贪婪策略(续2)
价值密度准则:定义pi/wi,从剩余的物品中,挑选可以装入背包的价值密度 最大的物品
例如:n=2, w=[10,20], p=[5,100], c=25 直觉上接近最优解,作为一个启发算法 启发式贪婪算法,不能保证得到最优解
2020/11/3
36
改进算法
{2,4}, x=[0,1,0,1], p=23, 最优解
{3,4}, 不可能!
2020/11/3
39
3、应用3:拓扑排序
拓扑排序:由某个集合上一个偏序关系得到一个全序关系
2020/11/3
40
算法思想
1
3
1. 在有序图上选取 一个没有前驱的顶点
6 并输出
4
2. 从该图中删除该顶
点以及所有以它为弧
bool swapped = false; // no swaps so far
for (int i = 0; i < n - 1; i++)
template<class T> if (*table[i] > *table[i+1]I)nd{irectList<T>&
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2020/12/12
12
输入数据保证最后可以达到每堆石子的个 数相等
2020/12/12
9
解题思路
本题模型与均分纸牌很相似
均分纸牌:一条直线 石子移动:环
参考上一题的方法,尝试从任何一堆纸牌 出发,求得当前的最小移动的石子数
从不同的石子堆出发最小移动石子数一样么? 如何得到全局最优解
枚举每个出发点,从中找一个移动石子数目最小的。
2020/12/12
7
解题思路
确定最终每堆纸牌上的纸牌数目 从一个端点出发沿着一个方向移动纸牌,
每次移动后确保当前这堆纸牌上的数目是 最终每堆纸牌数目
注意:可以移动负数
最优方案,证明?
代码略
2020//12
8
问题3:石子移动
有N堆石子排成一个圈,第i堆石子有ai个石 子。每堆石子均可被移动到相邻的堆,请 问要使得所有堆石子的个数均相等,最少 需要移动多少个石子。
《程序设计实践》
程序设计方法之 贪心法
2020/12/12
1
贪心法
概念:贪心法( Greedy algorithm),又 称贪心算法,是一种在每一步选择中都采 取在当前状态下最好或最优(即最有利) 的选择,从而希望导致结果是最好或最优 的算法
每一步上都要保证能获得局部最优解,但由此 产生的全局解有时不一定是最优的
int main() {
int n, heap[MAXHEAP], tmpHeap[MAXHEAP]; // minMoves表示最小移动的牌数,初始化为最大整数 int nTotal = 0, nAverage = 0, minMoves = 0x7FFFFFFF, nMoves; int i, j;
cin >> n;
2020/12/12
11
参考代码(续)
//读入数据,并得到最终每堆石子的数量nAverage; for (i = 0; i < n; i++) {
cin >> heap[i]; nTotal += heap[i]; } nAverage = nTotal / n;
int now, next; //当前的石子堆now,now右边的石子堆next int nStart = 0; //记录得到最少移动牌数的方案中起点位置
引理1:
若n是正整数,则用25美分、10美分、5美分和 1美分等尽可能少的硬币找出的n美分零钱中, 至多有2个10美分、至多有1个5美分、至多有4 个1美分硬币,而不能有2个10美分和1个5美分 硬币。用10美分、5美分和1美分硬币找出的零 钱不能超过24美分。
2020/12/12
4
贪心法证明(续)
这两种方式中有同样多的25美分硬币,所以在这两种方式中 10美分、5美分和1美分硬币的总值一定相等,并且这些硬 币的总值不超过24美分
10美分硬币的个数一定相等,因为贪心算法使用尽可能多的 10美分硬币。而根据引理1,当使用尽可能少的硬币找零钱 时,至多使用1个5分硬币和4个1分硬币,所以在找零钱的 最优方式中也使用尽可能多的10美分硬币。类似地,5美分 硬币的个数相等;最终,1美分的个数相等。
一般说来,时间复杂度较低,算法实现也比较 容易
2020/12/12
2
问题1:找零钱
找零钱找给顾客。手头有quarters ($0.25), dimes ($0.10), nickels ($0.05) and pennies ($0.01),将 钱找给顾客,但是需要你找给顾客的钱币数量最 少。
现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌 数都一样多。
例如 N=4,4 堆纸牌数分别为: ① 9 ② 8 ③ 17 ④ 6 移动3次可达到目的: 从 ③ 取 4 张牌放到 ④ (9 8 13 10) -> 从 ③ 取 3 张牌放到 ② (9 11 10 10)-> 从 ② 取 1 张牌放到①(10 10 10 10)。
2020/12/12
5
找零钱问题(续)
找零钱找给顾客。手头有quarters ($0.25), dimes ($0.10), nickels ($0.05) and pennies ($0.01),将钱 找给顾客,但是需要你找给顾客的钱币数量最少。
如果缺少nickels($0.05)的硬币,如何找给 顾客,才能使钱币数量最少?
如果要找给顾客0.3元钱,最优方案? 贪心法方案:0.25 +0.01 * 5 0.1 * 3
2020/12/12
6
问题2:均分纸牌
均分纸牌(1040) 有 N 堆纸牌,编号分别为 1,2,…, N。每堆上有若干张,但
纸牌总数必为 N 的倍数。可以在任一堆上取若于张纸牌,然后移 动。
移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 的 堆上;在编号为 N 的堆上取的纸牌,只能移到编号为 N-1 的堆上; 其他堆上取的纸牌,可以移到相邻左边或右边的堆上。
解法:
枚举法:枚举所有可能,从中找出钱币数量最少的方 案
贪心法:尽可能的先找quarters,然后是dimes, nickels, pennies
这样找出的钱币的个数一定最少么????
2020/12/12
3
贪心法证明:
方便起见上述硬币表示为25美分,10美分, 5美分,1美分,待找钱为n美分。
2020/12/12
10
参考代码
#include <stdio.h> #include <stdlib.h> #include <memory.h> #include <cmath> #include <iostream>
using namespace std; #define MAXHEAP 1100
反证法:
假设存在正整数n,使得有办法将25美分、10美分、5美分 和1美分硬币用少于贪心算法所求出的硬币去找n美分零钱。
首先,在这种找n美分零钱的最优方式中使用25美分硬币的 个数q′,一定等于贪心算法所用25美分硬币的个数。
为了说明这一点,注意贪心算法使用尽可能多的25美分硬币,所 以q′≤q。但是q′也不能小于q。假如q′小于q,需要在这种最优方式 中用10美分、5美分和1美分硬币至少找出25美分零钱。而根据引 理1,这是不可能的。