贪心算法(蓝桥杯 C++ 题目 代表 注解)

本文介绍了贪心算法的基本概念,强调其局部最优决策的特点,以及如何在满足贪心选择和最优子结构的前提下解决问题。通过实例演示了找零、分糖果、翻硬币和答疑问题的贪心算法实现,提醒读者注意问题性质对算法适用性的关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍:

贪心算法(Greedy Algorithm)是一种在每一步选择中都采取当前状态下最好或最优(即最有利)的选择,从而希望最终能够得到全局最好或最优的结果的算法。它通常用来解决一些最优化问题,如最小生成树、最短路径等。

贪心算法的核心思想是每次都选择局部最优解,而不考虑全局的情况。通过不断地做出局部最优选择,整体上就能得到一个接近最优解的解。

然而,贪心算法并不是在所有情况下都能得到最优解。由于贪心算法只考虑当前的最优选择,而不进行回溯,可能会导致最终结果并非全局最优解。因此,在使用贪心算法时,需要确保问题具备贪心选择性质(即局部最优解能够导致全局最优解)以及最优子结构性质(即问题的最优解包含了其子问题的最优解)。

在应用贪心算法时,可以采用贪心选择、最优子结构和证明最优性三个步骤来设计算法。首先,通过贪心选择找到局部最优解;然后,通过证明最优性来证明贪心选择是安全的;最后,通过最优子结构来将问题分解为子问题,并迭代地求解子问题。

总之,贪心算法是一种简单而有效的算法,可以在一些满足贪心选择性质和最优子结构性质的问题上得到最优解。然而,在应用贪心算法时需要注意验证问题的性质,以确保得到正确的结果。

题目一(找零问题):

 ​​

代码: 

#include<iostream>
using namespace std;
int main()
{
    int n, i = 1;
    cin >> n;
    int a[6] = { 0,100,50,20,5,1 };
    int cnt[6] = { 0 };
        while (n)
        {
            c
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值