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;
 
}
复制代码

 

posted @   努力学习2333  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
历史上的今天:
2023-02-23 2月23日软件工程日报
点击右上角即可分享
微信分享提示