码迷,mamicode.com
首页 > 其他好文 > 详细

分数规划

时间:2019-10-03 01:13:19      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:font   int   double   style   最优   code   str   答案   while   

普通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;i<n;i++) d[i]=a[i]-x*b[i];
    sort(d,d+n);
    double F=0;
    for(int i=n-1;i>=n-k;i--) F+=d[i];
    return F>=0;
}

最优比率生成树

最优比率生成环

01分数规划+树形背包

分数规划

标签:font   int   double   style   最优   code   str   答案   while   

原文地址:https://www.cnblogs.com/wronin/p/11618759.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!