贪心算法(人类的本质果然是贪心加复读机哈哈哈)
Posted mid2dog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了贪心算法(人类的本质果然是贪心加复读机哈哈哈)相关的知识,希望对你有一定的参考价值。
前言
紧张的期末考试结束了,过了几天奢靡的寒假生活后无聊到又回来做题啦
(好像好久好久没做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
以后遇上贪心再补充吧,的确这道题的贪心算法过于简单了= =
以上是关于贪心算法(人类的本质果然是贪心加复读机哈哈哈)的主要内容,如果未能解决你的问题,请参考以下文章