这是题目描述,标签是贪心。
思路:在一个站点往后找可以触及的站点中油价最便宜的。如果最便宜的比现在的站点便宜,那就买正好能到那个站点的油。如果比现在的站点贵,那就把油买满,然后去那个站点。
以下是代码:
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}")