分数规划

普通01分数规划

由n个物品,每个物品由两个属性a和b,选出k个物品,使Σai / Σbi 的值最大

设x=Σai / Σbi, F()=Σa-xΣb, D()=a-xb

当F()=0时,则为答案;当F()>0时,则说明答案小了;当F()<0时,则说明答案大了

二分答案

double l=0,r=1.0,mid;
while(r-l>1e-5) {
    mid=(l+r)/2;
    if(work(mid)) l=mid;
    else r=mid;
}
int work(double x) {
    for(int i=0;ib[i];
    sort(d,d+n);
    double F=0;
    for(int i=n-1;i>=n-k;i--) F+=d[i];
    return F>=0;
}

最优比率生成树

最优比率生成环

01分数规划+树形背包

你可能感兴趣的:(分数规划)