牛客oj 习题7.2 To Fill or Not to Fill(经典贪心)

 

这题和上一题相似,都是选出当前最佳步数,但策略要更加复杂。

我这里把加油站分成了两类:

第一类继承者:价钱比当前油价钱便宜或相等,离得最近。
第二类继承者:无第一类继承者的情况下,剩下的油都比第一类贵,从贵的中找出一个相对便宜的。


贪心策略:
1.先把所有加油站按距离排个序。
2.从中找出第一类继承者和第二类继承者(若无第一类)。
3.如果无第一类继承者且安全范围内到达终点,直接加上到终点距离的油即可。
4.如果找到第一类继承者,加上到第一类继承者加油站之间距离的油量,注意原本也可能还有剩余的油。
5.如果未找到第一类继承者,但找到了第二类继承者,则先加满油后扣除到该加油站距离的油量。
6.如果两类继承者都没有找到,直接加上到能到达最远点的油即可。

注意这题同一个地点可能有多个加油站,通常用两种方法解决:对相同地点的加油站费用由低到高排序再做相应处理;直接在输入时去重。因为后一种可以节省时间,所以就使用了后一种。不过我写复杂了,用map会大大简化,可惜意识到这个问题时候已经写完了,就这样将就一下了。

PS:这题昨天写的,写了我大半天,刚开始贪心策略倒是对了,但就是模拟不出来。变量太多,边界也很多,写了一遍后写的又臭又长控制不住了,想放弃。后来看了别人题解我策略没问题就不想浪费,索性干脆删了重写了一遍,因为边界又各种卡不过好在牛客提供样例(这方面的确牛客比其他oj好),总算是过了。事实表明贪心尽量找出最好写的方法不然能写崩,我果然在贪心这方面还是太菜了。。。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值