贪心好题(两种变量的贪心)poj3262 Protecting the Flowers

博客介绍了如何解决一道涉及两种变量的贪心问题——保护花朵。奶牛吃花的贪心策略通过分析时间和吃花数量两个因素,采用假设法证明应该按照Di/Ti进行贪心选择,以达到最小破坏花朵数量的目标。文章提供了严谨的证明过程和解题思路,并给出了相关代码实现。
摘要由CSDN通过智能技术生成

题意: 有N头奶牛正在吃花,FJ需要将这N头奶牛运输回去,给出每头奶牛被运输的时间(单程,不算往返)和每分钟吃花的数量,求最小的被破坏的花朵数量

题解:

这道题可不能凭感觉去贪心,因为他有两个变量,时间和数量,单纯对一种变量进行贪心无法保证答案的正确性

所以就需要分析得出贪心策略,对于这类题,一般用假设法来判断,如果只是要进行一个粗略的判断,可以这么想:

对于即将被赶走的奶牛,我们自然希望他每分钟吃花的数量越多越好,这样效率就会越高,而运输的时间越短越好

这样才能尽快回来运输下一头奶牛,于是我们就可以猜测要么是按Di/Ti贪心,要么是按Di-Ti贪心了,如果是考试,

构造几个样例试一下就可以了

下面是严谨的证明,用的是假设法:

可以推得:ans1=sigma(Ti)<1~N>*D1+sigma(Ti)<2~N>*D2+……+sigma(TI)<1~2>*Dn-1

我们假设将D1和D2交换一下位置

那么 ans2=sigma(Ti)<1~N>*D2+sigma(Ti)<1,3~N>*D1+……+sigma(Ti)<1~2>*Dn-1

如果ans1比ans2优,即:ans1<ans2

则有ans2-ans1>0 => T1*D2-T2*D1>0

同理可推得,若Di/Ti > Dj/Tj ,则先赶走第i头奶牛

代码:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值