贪心算法(人类的本质果然是贪心加复读机哈哈哈)

前言

紧张的期末考试结束了,过了几天奢靡的寒假生活后无聊到又回来做题啦
(好像好久好久没做ctf和acm了)
然后愉快的刷了一早上杭电十一页,一切都是如此顺畅的ac,直到我遇见了它,2021题。
在这里插入图片描述然后想一口吃下全局,总在想怎么从总工资里分出总张数。。果然我是只菜狗。

百度了下wp,发现用到了贪心算法,名字挺有趣的,于是决定把它学了再说!

开肝!
———————————————————————————————————

补充养分

首先要学贪心,推荐
https://baijiahao.baidu.com/s?id=1642122740570394361&wfr=spider&for=pc
强烈安利!
强烈安利!
强烈安利!
三步走轻松了解贪心
贪心算法的三步走!

第一步

明确到底什么是最优解?明确下来之后用小本本记下来!

第二步

明确什么是子问题的最优解?再用小本本记下来!

第三步

分别求出子问题的最优解再堆叠出全局最优解?这步不用记!

就是这么简单!

然后。。。然后我就莫名其妙看会了。神了。

反过来看那道题2021,那么应该就是把每一个老师贪心了即可

–——————————————————————————————————

分析(杭电oj 2021题)

首先,每个老师的工资应当是独立的。总不可能一个老师三块钱,另一个老师两块钱,你准备一张五块钱这样子。很明显是无法将总工资合在一起的,所以每个老师的工资自然要分别计算。而根据贪心算法,我只追求眼前的利益,只把眼前每个老师的工资算出最优解然后合计应该就是全局最优解了。每个老师的最优解是这么考虑的:很简单,面值大张数少。。1张100总比100张1块来的爽快= =
所以就一个个除下来,然后从大到小统计个数。
然后觉得太麻烦了,于是就照着网上简单的方法列出数组,然后用for遍历,果真方便!


附上代码
#include<stdio.h> 
int fix[6]={100,50,10,5,2,1};
int a[105];
int sum;
int main()
{
    int n;
    while(~scanf("%d",&n)&&n)
    {
        sum=0;
        for(int i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
        }
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<6;j++)
            {
                sum+=a[i]/fix[j];
                a[i]%=fix[j];
            }
        }
        printf("%d\n",sum);
    }
    return 0;
}

代码 code by this
以后遇上贪心再补充吧,的确这道题的贪心算法过于简单了= =

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值