POJ 3111 K Best 01分治

来源:互联网 发布:基金软件手机版 编辑:程序博客网 时间:2024/05/19 23:16

原题链接

与POJ2976报告 相似

#include <cstdio>#include <algorithm>using namespace std;int n,k;double l,r,ans;struct node1{double w,v;};struct node2{double m;int num;};node1 A[100010];node2 d[100010];bool cmp1(node2 n1,node2 n2){return n1.m>n2.m;}int main(){    while(~scanf("%d%d",&n,&k)){        for(int i=1;i<=n;i++)            scanf("%lf%lf",&A[i].v,&A[i].w);        l=0,r=0x3f3f3f3f;        while(l+1e-6<r){            double mid=(l+r)/2,ans=0;            for(int i=1;i<=n;i++){                d[i].m=A[i].v-mid*A[i].w;                d[i].num=i;            }            sort(d+1,d+n+1,cmp1);            for(int i=1;i<=k;i++)                ans+=d[i].m;            if(ans>0) l=mid;            else r=mid;        }        for(int i=1;i<=k;i++)            printf("%d ",d[i].num);        printf("\n");    }    return 0;}


原创粉丝点击