ACM贪心算法-个人理解第一阶段

//经过一周不到的贪心训练,菜鸡突然想说点什么

//训练题目:应该是出自陕西暑假 ACM 集训入门班题目   【2017 Summer Training】入门班day1 

//还没有完全补完,只是先对贪心有了初步了解


贪心,顾名思义,就是从在求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解

我将选择划分为第一阶段,是因为我现在接触的都是纯贪心,没有其他算法的综合

简单点来说,地上有10块钱和5块钱,只能捡一张,如何让面值最大

那就选10块的呗,这是我们在当前状态最好的选择


但在当前状态是最优解,但全局来说,就不一定是最优解了

例如,用7  6 4 1 凑出 12 块钱,如何用最少数量的钱凑

如果按照贪心的思想,应该是取 7—>4—>1 对每一步进行最优选择

但实际上,6—>6 就可以,这里就是全局最优和局部最优的区别了,全局的话需要DP(动态规划)的思路了,不多说

在我看来,贪心是一种很主观的算法,他跟我们生活很相关,做题的时候,可以自己感觉性模拟,如果是我。。我怎么取,怎么选择,然后按照自己选的标准去写代码,错不了。

面对这一类贪心问题,想AC最大的问题是关于cmp函数的书写

贪心每次都要取当前最优解,跟cmp函数分不开关系

例如在HDU-4310 Hero中

int cmp(boss a,boss b)
{
   return  a.dps*b.hp>b.dps*a.hp;
}

就是一个Dps/Hp的比值问题的排序,这在生活中也常见,我们总是先会干那些性价比高的事情,这样才能使我们浪费的成本变低,如果只是对一个方面考虑,则会造成较大的损失

//再有什么好的理解再补











猜你喜欢

转载自blog.csdn.net/AC_Meiko/article/details/80084900
今日推荐