1 条题解

  • 0
    @ 2025-2-14 21:13:45

    C++ :

    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    #include<cstring>
    #include<cmath>
    #include<queue>
    #define INF 10000000
    #define N 1000010
    using namespace std;
    double ci[N],pi[N];
    double dp[N];
    int main()
    {
        double l,c,m,s;
        int n;
        while(cin>>l>>c>>m>>pi[0]>>n)
        {
            for(int i=1;i<=n;i++)
            {
                scanf("%lf%lf",&ci[i],&pi[i]);
            }
            ci[0]=0,ci[n+1]=l,pi[n+1]=INF;
            s=c*m;
            for(int i=0;i<=n+1;i++)
                dp[i]=INF;
            dp[0]=0;
            int flag=0;
            for(int i=0;i<=n;i++)
            {
                for(int j=i+1;j<=n+1;j++)
                {
                    if(s>=ci[j]-ci[i])
                    {
                        dp[j]=min(dp[j],dp[i]+pi[i]*(ci[j]-ci[i])/m);
                    }
                    else
                    {
                        if(s>=ci[j]-ci[j-1])
                            dp[j]=min(dp[j],dp[i]+(pi[i]*s+pi[j-1]*(ci[j]-ci[i]-s))/m);
                        else
                        {
                            flag=1;
                            break;
                        }
                    }
                }
                if(flag==1)
                    break;
            }
            if(dp[n+1]==INF)
                cout<<"No Solution"<<endl;
            else
                printf("%.2lf\n",dp[n+1]);
        }
        return 0;
    }
    
    • 1

    信息

    ID
    731
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者