//经过一周不到的贪心训练,菜鸡突然想说点什么
//训练题目:应该是出自陕西暑假 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的比值问题的排序,这在生活中也常见,我们总是先会干那些性价比高的事情,这样才能使我们浪费的成本变低,如果只是对一个方面考虑,则会造成较大的损失
//再有什么好的理解再补