贪心算法的例子
贪心算法 写这篇博文的目的是因为对于贪心算法一直没有很深的理解,每次都会因为贪心算法AC不了而头疼。 贪心的主要思想 总是选择“当前最好的选择”,而不从整体上去把握的思想。贪心算法在某种情况下的确能得到最优的结果。 例子1 FatMouse’ Trade 题目的大致意思是:m元钱,n种物品,每种物品j磅,总价值f元,可以使用0到f的任意价格购买相应磅的物品,例如使用0.3f元,可以购买0.3j磅物品。要求输出用m元钱最多能买到多少磅物品。 输入 : 输入m元,n种物品,后输入n种物品,以及每种物品对应的重量、总价值,输入-1,-1结束输入。 这题可以用贪心算法求解,对于剩余物品,每次都购买剩余物品中性价比(即重量/价格)最高的物品,直到该物品被买完,则我们继续在剩余的物品中寻找性价比最高的物品,重复该过程;若金钱耗尽,则交易结束。 下面证明是否能用贪心算法求得最优解 按照贪心算法的思想,如果存在性价比为a高的物品,那么原物品中性价比高于a的物品一定全部被我们买下来。采用反证法,假设,存在着性价比b>a的物品没有被买下来,但是我们获得了最优解,此时,如果退掉了a而去购买b,那么在同样的价钱下,b的重量会明显的大于a,也就是说a不是最优解。假设不成立,因此,按照贪心算法求得的是最优解。 下面上代码; #include < stdio . h > #include < algorithm