当前位置: 首页 > news >正文

【数据结构与算法】贪心算法

贪心算法目录

  • 一.贪心算法的思路
  • 二.换零钱
  • 三.完整代码
  • 四.贪婪使用场景

一.贪心算法的思路

贪心顾名思义,比如说现在我贪玩,不卷,那么我以后可能会不爽,但是现在我非常爽,就是当下的最有解.
就是我看眼前的我怎么舒服怎么来.

二.换零钱

一般我们会设置手头面值最大的值来进行换取,不够再用小面值的凑.
假设如下是我所拥有的零钱value是面值,count是对应面值的数量.
在这里插入图片描述
那么我是从后往前来进行的遍历先是面值最大的.

在这里插入图片描述
可以自动需要几张.
在这里插入图片描述
判断该面值的数量够不够.
在这里插入图片描述

三.完整代码

#include <stdio.h>
#include <stdlib.h>#define N 7int value[N] = { 1,2,5,10,20,50,100 };
int count[N] = { 10,2,3,1,2,3,5 };//int value[N] = { 1,2,5,10,20,50,100 };//不是最优解
//int count[N] = { 0,0,0,0,3,1,0 };int solve(int money)
{int num = 0;int i = 0;for (i = N - 1; i >= 0; i--){int j = money / value[i];int c = j > count[i] ? count[i] : j;printf("需要用面值 %d 的纸币 %d z张\n", value[i], c);money -= c * value[i];num += c;if (money == 0)break;}if (money > 0)num = -1;return num;
}int main()
{int money=0;int num=0;printf("请输入要换的钱数目:\n");scanf_s("%d", &money);num = solve(money);if (num == -1){printf("对不起,找不开\n");}else{printf("成功的使用至少%d张纸币实现找零\n", num);}system("pause");return 0;
}

运行结果:
在这里插入图片描述
但是我用这种情况的时候,就不是最优解了.
在这里插入图片描述
运行结果:
在这里插入图片描述
本来有3张20的,但是他却没有换开.

四.贪婪使用场景

所以当我们要求速度或者只顾当前的最优解,那么我们可以考虑贪心算法.
但是顾局大全就不可以了,所谓目光短浅,就是如此.

2024年8月17日19:59:34


http://www.mrgr.cn/news/4658.html

相关文章:

  • Android14 Settings属性断电上电不记忆问题分析解决
  • Python处理生信分析流程配置文件4种方法
  • PostgreSQL-04-入门篇-连接多张表
  • 【Linux】文件系统
  • 案·理探析 | 网络爬虫技术滥用的刑事责任
  • Pandas数据清洗之数据分组和删除重复数据
  • C++ | Leetcode C++题解之第354题俄罗斯套娃信封问题
  • 通过电影之镜,提升生活之美
  • springboot是如何处理yml配置文件的
  • c++中的iomanip
  • linux 挂载virtio-blk-device虚拟磁盘
  • 配置策略路由实战 附带基础网络知识
  • CAS-ViT实战:使用CAS-ViT实现图像分类任务(一)
  • Recyclerview分组列表学习备忘
  • GNU/Linux - GNU Software之ncurses
  • JavaScript 中的深拷贝新宠:structuredClone() 函数详解
  • 单片机烧录
  • 开发高质量PDF应用的不二选择:PdfiumViewer库详细解析
  • C语言手撕实战代码_循环单链表和循环双链表
  • 【15】Java字节码