我觉得思路是没有问题的,就是汽车到达一个费用比他所在的加油点就加到到达下一个费用较少的加油点的油。
#include<bits/stdc++.h>
using namespace std;
int main()
{
double c,d1,d2,p1,s=0,m=0;
int n,i,b=0,f=0;
double d[100000]={0},p[100000]={0};
cin>>d1>>c>>d2>>p1>>n;
for(i=1;i<=n;i++)
cin>>d[i]>>p[i];
p[0]=p1;
d[0]=0;
d[n+1]=d1;
i=1;
if(d1-d[n]>c*d2)
cout<<"No Solution"<<endl;
if(d[1]>c*d2)
cout<<"No Solution"<<endl;
else
while(1)
{
if(d[b]=d1)
{
printf("%.2f",m);
break;
}
if(d[i]-d[b]>c*d2)
{
if(i-b==1)
{
cout<<"No Solution"<<endl;
break;
}
else
{
i--;
m+=(d[i]-d[b])*p[b];
b=i;
}
}
else if(p[i]<=p[b])
{
m+=(d[i]-d[b])*p[b];
b=i;
}
i++;
}
return 0;
}