• 01分数规划模板


    /*
        01分数规划模板(Dinkelbach)
        01分数规划就是把 sum(a)/sum(b)转换成 f(x)=sum(a)-ans*sum(b);
        当f(x)取到0时,ans取到了最大(小)值
        poj 2976 
        两个长度为n的数组a,b
        可以除去m个,怎样选择才能使剩下的 
        sum(a)/sum(b)的百分数最大  
    */
    
    
    int n,m;
    struct Node{
        int a,b;
        double v;   ///用于排序筛选较大的值(题目要求极大值
        bool operator<(const Node&a)const{
            return v<a.v;
        }
    }node[N];
    double d[N];
    double check(double ans){
        for(int i=1;i<=n;++i)node[i].v=node[i].a-ans*node[i].b;
        sort(node+1,node+n+1);
        double c=0,_b=0;
        for(int i=m+1;i<=n;++i){
            c+=node[i].a;
            _b+=node[i].b;
        }
        return c/_b;  ///模拟sum(a)/sum(b)
    }
    int main(){
        int i,j,group,temp;
        while(scanf("%d%d",&n,&m)!=EOF&&(n||m)){
            for(i=1;i<=n;++i)scanf("%d",&node[i].a);
            for(i=1;i<=n;++i)scanf("%d",&node[i].b);
            double ans,temp=0;///temp用于校验答案,初始为任意值均可
            do{
                ans=temp;
                temp=check(ans);
            }while(fabs(ans-temp)>1e-4); ///根据题目要求改精度
            printf("%.0f
    ",ans*100); ///原题是百分数所以*100
        }
        return 0;
    }
  • 相关阅读:
    网页基本信息
    3.ThinkPHP入门---视图
    2.TinkPHP入门----控制器
    1.Thinkphp入门--框架介绍
    C#生成二维码
    .net mvc中的表单异步提交
    .net MVC中异常日志
    .net导入excel数据到数据库中
    执行带返回参数的存储过程
    Jquery客户端校验——jquery.validate.js
  • 原文地址:https://www.cnblogs.com/Kurokey/p/5738605.html
Copyright © 2020-2023  润新知