1.题意:给一共N个物品,每个物品有重量W,价值V,要你选出K个出来,使得他们的平均单位重量的价值最高

2.分析:题意为最大化平均值问题,由于每个物品的重量不同所以无法直接按单位价值贪心,但是目标值有界且能判断与最后答案的大小关系,所以用二分来做

3.代码:

  1. # include <iostream>
  2. # include <cstdio>
  3. # include <cmath>
  4. # include <algorithm>
  5. using namespace std;
  6. const double eps=1e-;
  7. const int MAXN=;
  8. int N,K;
  9. int sgn(double x)
  10. {
  11. if(fabs(x)<eps) return ;
  12. if(x>) return ;
  13. else return -;
  14. }
  15. struct Node
  16. {
  17. int n;
  18. double v,w;
  19. Node(){}
  20. Node(int nn,double vv,double ww)
  21. {
  22.  
  23. n=nn;
  24. v=vv;
  25. w=ww;
  26. }
  27. }L[MAXN];
  28. struct OUT
  29. {
  30. int n;
  31. double sum;
  32. OUT(){}
  33. OUT(int nn,double ss)
  34. {
  35. n=nn;
  36. sum=ss;
  37. }
  38. };
  39. bool cmp(OUT x,OUT y)
  40. {
  41. return sgn(y.sum-x.sum)<;
  42. }
  43. void Init()
  44. {
  45. double a,b;
  46. for(int i=;i<N;i++)
  47. {
  48. scanf("%lf%lf",&a,&b);
  49. L[i]=Node(i+,a,b);
  50. }
  51. }
  52. void Solve()
  53. {
  54. OUT O[MAXN];
  55. double l=0.0;
  56. double r=1e7;
  57. while(sgn(r-l)!=)
  58. {
  59. double mid=l+(r-l)/2.0;
  60. for(int i=;i<N;i++)
  61. O[i]=OUT(L[i].n,L[i].v-L[i].w*mid);
  62. sort(O,O+N,cmp);
  63. double temp=;
  64. for(int i=;i<K;i++)
  65. temp+=O[i].sum;
  66. if(sgn(temp)<) r=mid;
  67. else l=mid;
  68. }
  69. for(int i=;i<K-;i++)
  70. printf("%d ",O[i].n);
  71. printf("%d\n",O[K-].n);
  72. }
  73. int main()
  74. {
  75. while(scanf("%d%d",&N,&K)!=EOF)
  76. {
  77. Init();
  78. Solve();
  79. }
  80. return ;
  81. }

POJ 3111 K Best 最大化平均值 [二分]的更多相关文章

  1. poj 3111 K Best 最大化平均值 二分思想

    poj 3111 K Best 最大化平均值 二分思想 题目链接: http://poj.org/problem?id=3111 思路: 挑战程序竞赛书上讲的很好,下面的解释也基本来源于此书 设定条件 ...

  2. POJ 3111 K Best(最大化平均值)

    题目链接:click here~~ [题目大意]有n个物品的重量和价值各自是Wi和Vi.从中选出K个物品使得单位重量的价值最大,输出物品的编号 [解题思路]:最大化平均值的经典.參见click her ...

  3. POJ 3111 K Best(01分数规划)

    K Best Time Limit: 8000MS   Memory Limit: 65536K Total Submissions: 9876   Accepted: 2535 Case Time ...

  4. poj 3111 K Best (二分搜索之最大化平均值之01分数规划)

    Description Demy has n jewels. Each of her jewels has some value vi and weight wi. Since her husband ...

  5. poj3111 K Best 最大化平均值,二分

    题目:http://poj.org/problem?id=3111 题意:给你n,k,n个数的v.w值,选出k个数,使得v之和/w之和最大化. 思路:一看到题目,这不是赤果果的贪心吗?为什么放在二分专 ...

  6. POJ 3111 K Best(二分答案)

    [题目链接] http://poj.org/problem?id=3111 [题目大意] 选取k个物品,最大化sum(ai)/sum(bi) [题解] 如果答案是x,那么有sigma(a)>=s ...

  7. POJ - 3111 K Best 0-1分数规划 二分

    K Best Time Limit: 8000MS   Memory Limit: 65536K Total Submissions: 12812   Accepted: 3290 Case Time ...

  8. POJ 3111 K Best ( 二分 )

    题意 : 给出 N 个物品的价值和重量,然后要求选出 K 个物品使得选出来物品的单位重量价值最大,最后输出被选物品的编号. 分析 :  很容易去想先算出每个物品的单位价值然后升序排序取前 K 个,但是 ...

  9. POJ - 3111 K Best(二分)

    包含一些ai和bi的集用S来表示,x = max(sigma(ai)/sigma(bi),i 属于S) ,k 表示S的大小,k= |S|. x和k之间具有单调性.k0 < k1 → x0 ≥ x ...

随机推荐

  1. poj2112 最大流

    我用Dinic写的.G++ 1800ms 很慢,c++直接超时.优化后的 141ms,很快! 对于此题,建图方法很巧妙,通常想到求距离,那就会朝距离的方向建图,但是这题根据牛个数来建图,然后二分距离. ...

  2. BZOJ 3884 上帝与集合的正确用法题解

    一道智慧题 其实解这题需要用到扩展欧拉定理, 有了上面的公式,我们不难看出此题的解法. 设b为2^2^2^2^2.....显然,b要比φ(p)要大,所以可以直接套公式 modp时的答案 ans(p)= ...

  3. SaaS加速器II 能力中心:互利互补 共享商业红利

    摘要: 通过丰富的阿里集团和三方的业务能力API,缩短业务从0-1构建的周期和降低成本,我们希望能够把阿里巴巴在电商.金融.物流.高德以及其他领域沉淀出来商业最佳实践.商业能力,通过阿里云的渠道输出, ...

  4. Laravel 发送邮件(最简单的讲解!)

    Laravel集成了SwiftMailer库进行邮件发送,邮件配置文件位于config/mail.php:. return [ 'driver' => env('MAIL_DRIVER', 's ...

  5. PHP5.2 汉字json_encode

    //对汉字编码 private function url_encode($str) { if(is_array($str)) { foreach($str as $key=>$value) { ...

  6. 07Redis入门指南笔记(主从复制、哨兵)

    现实项目中通常需要若干台Redis服务器的支持: 结构上,单个 Redis 服务器会发生单点故障,而且一台服务器需要承受所有的请求负载.这就需要为数据生成多个副本并分配在不同的服务器上: 容量上,单个 ...

  7. CSDN-Java培训 - 看看这次会有多少人跟风...

    2019年5月8日,闲来无事(最近答辩还没事......),存个档. 看看这一波风口,记录互联网+教育.

  8. PHP导入导出Excel方法小结

    基本上导出的文件分为两种: 1:类Excel格式,这个其实不是传统意义上的Excel文件,只是因为Excel的兼容能力强,能够正确打开而已.修改这种文件后再保存,通常会提示你是否要转换成Excel文件 ...

  9. Git上传本地项目到码云

    前提:本地安装git.注册码云 1.进入本地项目文件夹,鼠标右键代开 Git Bash Here 2.输入命令 初始化库管理文件 git init 3.输入命名 修改Git的全局配置 git conf ...

  10. Python--day72--json内容回顾

    前后端分离,Json格式字符串:序列化和反序列化 """ 复习python中的json模块 """ import json s = '{&q ...