50分求助
查看原帖
50分求助
602932
NumberTrart楼主2023/1/18 11:38
#include<iostream>
#include<algorithm>
using namespace std;
double l,c,k,d[10],p[10];int n;
double price(int now/*d[]、p[]的下标*/,double cnt,double oil)
{
    if(now==n+1/*到终点*/) return cnt;
    int i=now+1;
    double ans=5000;
    while(d[i]-d[now]<=c*k && i<=n+1)
    {
        ans=min(ans,price(i,((d[i]-d[now])/k-oil)*p[now]+cnt,0));
        i++;
    }
    if(i>n+1)
        for(int j=now+1;j<=i-1;j++)
            ans=min(ans,price(j,cnt+(c-oil)*p[now],c-(d[j]-d[now])/k));
    return ans;
}
int main()
{
    cin>>l>>c>>k>>p[0]>>n;
    d[0]=0;
    d[n+1]=l;
    p[n+1]=0;
    for(int i=1;i<=n;i++)
        cin>>d[i]>>p[i];
    double z=price(0,0,0);
    if(z==5000)
    {
        cout<<"No Solution";
        return 0;
    }
    printf("%.2lf",z);
    return 0;
}
2023/1/18 11:38
加载中...