牛客第五场 A gpa

01分数规划的模本题

比赛贪心,贪了半天,最后队友想起这是01分数规划的题

发现自己的盲区。。。

01分数规划可以解决 01分数规划、最优比率生成树问题、最优比率环问题、最大密度子图等问题

01分数规划的详细讲解  这篇博客讲解的很好


AC 代码

#include <bits/stdc++.h>

using namespace std;
const int N = 1e5+10;
double s[N],c[N],d[N],l = 0.0,r = 0.0;
int n,k;
const double eps = 1e-5;

int check(double L)
{
    for(int i = 1;i <= n;i++)
        d[i] = s[i]*c[i] - L*s[i];
    sort(d+1,d+n+1);
    double ans = 0;
    for(int i = k+1;i <= n;i++)
        ans += d[i];
    return ans > 0;
}
void solve()
{
    while(l+eps<r)
    {
        double mid = (l+r)/2;
        if(check(mid))
            l = mid;
        else
            r = mid;
    }
    printf("%.10lf\n",r);
}
int main()
{
    scanf("%d%d",&n,&k);
    for(int i = 1;i <= n;i++)
        scanf("%lf",&s[i]);
    for(int i = 1;i <= n;i++)
        scanf("%lf",&c[i]),r = max(r,s[i]*c[i]);
    solve();
    return 0;
}

  

 

posted @ 2018-08-03 10:02  jadelemon  阅读(87)  评论(0编辑  收藏  举报