2024/2/23学习进度笔记
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解 。
贪心算法不是对所有问题都能得到体最优解,关键是整贪心策略的选择
贪心算法一般按如下步骤进行:
①建立数学模型来描述问题 。
②把求解的问题分成若干个子问题 。
③对每个子问题求解,得到子问题的局部最优解 。
④把子问题的解局部最优解合成原来解问题的一个解 。
贪心算法实际应用---零钱找回问题
这个问题在我们的日常生活中很普遍。
假设1元、2元、5元、10元、20元、50元、100元的纸币分别有
c0, c1, c2, c3, c4, c5, c6张。现在要用这些钱来支付K元,至少要用多少张纸币?
用贪心算法的思想,很显然,每一步尽可能用面值大的纸币即可。在日常生活中我们自然而然也是这么做的。在程序中已经事先将Value按照从小到大的顺序排好。
#include <iostream> #include <math.h> using namespace std; int single_money[7]={1,2,5,10,20,50,100}; int number_money[7]={2,5,1,3,4,0,4}; //每种面值使用贪心后的张数 int count[7]={}; int total_count; int tanxin(int money) { if(money>=0) { for(int i=6;i>=0;i--) { count[i]=min(number_money[i],money/single_money[i]); money=money-count[i]*single_money[i]; } return 0; } else { return money; } } int main() { int money; cout<<"please input the amount of money"; cin>>money; if(!tanxin(money)) { cout<<"贪心最优结果为:"<<endl; for(int j=6;j>=0;j--) { cout<<single_money[j]<<"元:"<<count[j]<<"张"<<endl; } } else { cout<<"ops,wrong number"; } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2023-02-23 2月23日软件工程日报