1 条题解

  • 0
    @ 2025-10-8 16:58:10

    qkw:

    #include<bits/stdc++.h>
    using namespace std;
    #define N 100010
    const double eps=1e-6;
    double a[N],b[N];pair<int,int>c[N];int n,m,f;
    bitset<N>bt,bt1;
    bool pd(double L)
    {
        bt1.reset();
        for(int i=1;i<=n;i++)c[i].first=a[i]-L*b[i],c[i].second=i;
        sort(c+1,c+n+1);
        double sum=f-L*m;
        for(int i=n;i>=1;i--)
        {
            if(sum>=0)
            {
                bt=bt1;
                return 1;
            }
            bt1[c[i].second]=1;
            if(c[i].first<0)return 0;
            sum+=c[i].first;
             
        }
        if(sum>=0)
        {
            bt=bt1;
            return 1;
        }
        return 0;
    }
    int main()
    {
        scanf("%d%d%d",&f,&m,&n);double l=0,r=f/m;
        for(int i=1;i<=n;i++)scanf("%lf%lf",&a[i],&b[i]),r=max(r,a[i]/b[i]);
        while(fabs(r-l)>eps)
        {
            double mid=(l+r)/2;
            if(pd(mid))l=mid+eps;
            else r=mid-eps;
        }
        if(bt.count()==0)puts("NONE");
        else for(int i=1;i<=n;i++)if(bt[i])cout<<i<<endl;
        return 0;
    }
    
    • 1

    *【01分数规划】[USACO10MAR] Need For Speed S

    信息

    ID
    1636
    时间
    1000ms
    内存
    128MiB
    难度
    6
    标签
    递交数
    45
    已通过
    16
    上传者