大佬帮帮忙!
#include <bits/stdc++.h>
using namespace std;
bool flag;
int N;
double D1,C,D2,P,d[10],p[10];
double s,ans,now,minn;
void f(int t){
if(now*D2+d[t]>=D1) return;
int i=t,j=t;
s=C*D2;//加满油能走的距离
s+=d[t];//再加上现在离起点的距离
//cout<<t<<' '<<s<<endl;
while(d[i+1]<=s && i+1<=N){
i++;
if(p[i]<p[t]){
j=i;
break;
}
}
if(j==t){
if(s>=D1){
ans+=p[i]*((D1-d[t])/D2-now);
return;
}
i=t,minn=501;
while(d[i+1]<=s && i+1<=N){
i++;
if(minn>p[i]){
minn=p[i];
j=i;
}
}
if(i==t){
cout<<"No Solution";
flag=true;
return;
}
ans+=p[t]*((s-d[t])/D2-now);
now=D2-(d[j]-d[t])/D2;
f(j);
}
else{
ans+=p[t]*((d[j]-d[t])/D2-now);
now=0;
//cout<<j<<' '<<ans<<endl;
f(j);
}
}
int main(){
cin>>D1>>C>>D2>>p[0]>>N;
for(int i=1;i<=N;i++){
cin>>d[i]>>p[i];
}
f(0);
if(!flag) printf("%.2f",(int)(ans*100+0.5)/100.0);
return 0;
}