求正解
#include<iostream>
#include<cstdio>
using namespace std;
double d1,c,d2,p1,s,mmax,sy;
int n;
struct pi{
double d;
double p;
} a[10];
int move(int x){
double m=9999.9;
int mi;
for(int i=x+1;i<=n;i++){
if(a[i].p<a[x].p&&a[i].d-a[x].d<=mmax){
s+=(a[i].d-a[x].d-sy)/d2*a[x].p;
sy=0;
return i;
}
if(a[i].p<m&&a[i].d<=a[x].d+mmax){
m=a[i].p;
mi=i;
}
}
if(a[x].d+mmax>=d1){
s+=(d1-a[x].d-sy)/d2*a[x].p;
return 999;
}
s+=mmax/d2*a[x].p;
sy=mmax-(a[mi].d -a[x].d);
}
int main(){
cin>>d1>>c>>d2>>p1>>n;
mmax=d2*c;
for(int i=1;i<=n;i++){
cin>>a[i].d>>a[i].p;
if(a[i-1].d+mmax<a[i].d){
cout<<"No Solution";
return 0;
}
}
if(a[n].d+mmax<d1){
cout<<"No Solution";
return 0;
}
a[0].d=0;
a[0].p=p1;
int k=0,j;
do{
j=move(k);
k=j;
}while(j!=999);
printf("%.2f",s);
return 0;
}