蓝桥杯训练--旅行家的预算

这是题目描述,标签是贪心。

思路:在一个站点往后找可以触及的站点中油价最便宜的。如果最便宜的比现在的站点便宜,那就买正好能到那个站点的油。如果比现在的站点贵,那就把油买满,然后去那个站点。

以下是代码:

d1,c,d2,p,n=map(float,input().split())

n=int(n)

y=[]

y.append([0,p])

for i in range(n) :
  y.append(list(map(float,input().split())))

y.append([d1,0])

flag=1

now=0

cost=0

i=0

while(i<n+1) :
  remote=c*d2
  if remote < y[i+1][0]-y[i][0]:
    flag=0
    break
  cheapest=i+1
  for j in range(i+2,n+2) :
    if y[j][0]-y[i][0]>remote :
      break
    if y[j][1]<y[cheapest][1] :
      cheapest=j
  if y[cheapest][1]>y[i][1] :
    cost+=(c-now)*y[i][1]
    now=c-(y[cheapest][0]-y[i][0])/d2
  else :
    if now*d2<y[cheapest][0]-y[i][0] :
      cost+=((y[cheapest][0]-y[i][0])/d2-now)*y[i][1]
      now=0
    else :
      now-=(y[cheapest][0]-y[i][0])/d2
  i=cheapest

if flag==0 :
  print("No Solution")
else :
  print(f"{cost:.2f}")
  

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值