【Yougth的最大化 914 二分搜索+ 贪心】

来源:互联网 发布:淘宝怎么上架产品 编辑:程序博客网 时间:2024/06/06 19:35

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=914

这道题目是一道0-1分数规划求最优值。

方法是一个二分搜索+贪心的题目。

出这道题目就是告诉大家二分不仅可以查找,还可以搜索一个更优值。

要使得单位重量的价值最大,则其最大不超过单个中最大的单位重量的价值,最小当然不小于0.

那么我们就这一在0--最大单位重量的价值中间找一个值ans,使得ans为满足题目条件的最大值。如果满足条件,则可以找更大的。设置一个条件。既二分搜索、

n个物品中找k个使得k个的价值和/质量和>=ans

为了使得ans尽可能的大,那么这里就要贪心选择。


#include<cstdio>#include<algorithm>using namespace std;double wi[10005],vi[10005],pi[10005];int n,k;bool cmp(double a,double b){    return a>b;}int check(double x){    for(int i=0;i<n;i++){//p[i] 代表的是  自己本省的价值-物品重量*最高单价        pi[i]=vi[i]-wi[i]*x;    }    double y=0;    sort(pi,pi+n,cmp);    //p[i] 由大到小排序。    for(int i=0;i<k;i++){           y+=pi[i];    }    return y>=0;}double  reach (double m){// 二分搜索    double l=0,r=m,mid;    for(int i=0;i<100;i++){        mid=(r+l)/2;        if(check(mid))            l=mid;        else            r=mid;    }    return l;}int main(){    while(~scanf("%d%d",&n,&k)){    double ma=0;    for(int i=0;i<n;i++){         scanf("%lf%lf",&wi[i],&vi[i]);         double ant=vi[i]/wi[i];         if(ant>ma)             ma=ant;//选择出单价最高的。    }    printf("%0.2lf\n",reach(ma));    }}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 老师每天打孩子怎么办 小孩不想去幼儿园怎么办 宝宝不想上幼儿园怎么办 小孩不爱学英语怎么办 孩子抵触学英语怎么办 初三了英语不好怎么办 孩子入园焦虑怎么办 家长总是说孩子怎么办 幼师打了小朋友怎么办 幼儿园老师欺负孩子怎么办 被老师冷落怎么办豆瓣 不满老师对孩子怎么办 老师总找茬孩子 怎么办 老师总针对孩子怎么办 老师看你不舒服怎么办 高中孩子不爱学习怎么办 孩子太倔不听话怎么办 老师老说孩子怎么办 孩子13不懂礼貌怎么办 老师不重视你 怎么办 我娃好动不听话怎么办 初三娃不听话该怎么办 小孩爱动不听话怎么办 宝宝吃饭讨神怎么办 孩子速度太慢怎么办 一年级做作业慢怎么办 小学三年级数学差怎么办 拼音基础太差怎么办 小孩学拼音差怎么办? 孩子字词基础差怎么办 孩子的语文不好怎么办 数学一直学不好怎么办 小孩数学成绩差怎么办 理科生语文不好怎么办 小学阅读题不好怎么办 如果孩子考不好怎么办 6岁不认识数字怎么办 数学一点都不会怎么办 初一数学太差怎么办 三年级孩子数学差怎么办 三年级孩子数学很差怎么办