挑选最美的珠宝

  题目大意:挑选k个珠宝使得∑a/∑b最大,输出组合数

  最大化平均值的标准题型,二分法就好了,一定要注意范围(10e-7),如果是10e-8就会tle,10e-6就是wa

  

 1 #include <iostream>
 2 #include <functional>
 3 #include <algorithm>
 4
 5 using namespace std;
 6 struct _set
 7 {
 8     int v, w, num;
 9 }jewels[100001];
10 struct _out_set
11 {
12     double price;
13     int num;
14     bool operator<(const _out_set &x)const
15     {
16         return price < x.price;
17     }
18 }y[100001];
19 static int s2[100001];
20
21 bool judge(double, const int, const int);
22
23 int main(void)//最大化平均值标准题型,要求输出组合
24 {
25     int n, k;
26     double lb, rb, mid;
27
28     while (~scanf("%d%d", &n, &k))
29     {
30         for (int i = 0; i < n; i++)
31         {
32             scanf("%d%d", &jewels[i].v, &jewels[i].w);
33             jewels[i].num = i + 1;
34         }
35         lb = 0; rb = 10e+7+1;
36
37         for (; rb - lb > 10e-7;)//精度起码10e-7以上,不能10e-8,不然tle
38         {
39             mid = (lb + rb) / 2;
40             if (judge(mid, n, k))lb = mid;
41             else rb = mid;
42         }
43         for (int i = 0; i < k; i++)
44             printf("%d ", s2[i]);
45         printf("\n");
46     }
47     return 0;
48 }
49
50 bool judge(double mid, const int n, const int k)
51 {
52     double sum = 0;
53     for (int i = 0; i < n; i++)
54     {
55         y[i].price = jewels[i].v - mid*jewels[i].w;
56         y[i].num = jewels[i].num;
57     }
58     sort(y, y + n);//内建排序一定要对,不然又要出错了T T
59
60     for (int i = 0; i < k; i++)
61     {
62         sum += y[n - i - 1].price;
63         s2[i] = y[n - i - 1].num;
64     }
65     return sum >= 0;
66 }

  

转载于:https://www.cnblogs.com/Philip-Tell-Truth/p/5139851.html

Divide and conquer:K Best(POJ 3111)相关推荐

  1. Divide and conquer:Dropping tests(POJ 2976)

    最大化平均值 题目大意:给定你n个分数,从中找出k个数,使∑a/∑b的最大值 这一题同样的也可以用二分法来做(用DP会超时,可见二分法是多么的实用呵!),大体上是这样子:假设最大的平均值是w,那么题目 ...

  2. 分治策略Divide and Conquer

    在计算机科学中,分治法是一种很重要的算法.字面上的解释是"分而治之",通常是递归算法,就是 把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题--直到最 ...

  3. 分治法 Divide and Conquer思想及实际应用

    分治思想 Divide and Conquer,即为分治法,基于分支递归的一种解决问题的思想方法. 分治分治,"分而治之"的意思,就是把一个复杂的原问题分成一个或多个相同子问题,而 ...

  4. K - Candies POJ - 3159(利用了自定义比较操作符)

    K - Candies POJ - 3159 题意: 孩子 A 觉得 B 得到的糖果不能比自己多超过 c,求 n 比 1 最多能多几颗糖果 思路:DJ,松弛条件: sweet[A] > swee ...

  5. INF421 - Amphi 2 Divide and Conquer

    INF421 - Amphi 2 Divide and Conquer 0.Quizz回顾 在数组中同时寻找最大和最小元素 Big-Oh Notation (Landau Symbols) 1. In ...

  6. POJ 3111 K Best 贪心 二分

    题目链接: http://poj.org/problem?id=3111 题目描述: 在N个物品中让你选出K个, 使得平均价值最大 解题思路: 这是我错的代码......一会儿回来改啊......一会 ...

  7. POJ 3111 K Best (最大化平均值,贪心 二分)难度⭐⭐⭐

    题目来源: [题意] 有n个物品的重量和价值分别是wi,vi,从中选取k个物品使得单位重量的价值最大. 输出格式: 输出一行物品的编号. #include<iostream> #inclu ...

  8. Divide and conquer:Drying(POJ 3104)

    烘干衣服 题目大意:主人公有一个烘干机,但是一次只能烘干一件衣服,每分钟失水k个单位的水量,自然烘干每分钟失水1个单位的水量(在烘干机不算自然烘干的那一个单位的水量),问你最少需要多长时间烘干衣服? ...

  9. Lecture 3 Divide and Conquer

    1.Divide the problem(instance) into one or more sub-problem; 2.Conquer each sub-problem recursively; ...

最新文章

  1. RenderMonkey基本使用方法
  2. 实现微服务架构-微服务架构需要解决的问题
  3. double 数组_寻找两个有序数组的中位数
  4. boost::interprocess::managed_heap_memory用法的测试程序
  5. 敏捷软件开发:原则、模式与实践(C#版)
  6. SQL Server 2005 在只有MDF文件的情况下恢复(丢失日志文件)
  7. SAP Spartacus 默认的 pwa,处于关闭状态还是打开状态?
  8. Vue CLI 3.0正式发布!
  9. Ranger-AdminServer安装Version2.0.0
  10. 判断当前窗体是否是顶级窗体
  11. jquery扩展提示框
  12. 【2022跨年】最浪漫的表白烟花,送给新的一年的自己(源码)
  13. shell脚本shc加密解密
  14. 如何用一束激光欺骗神经网络
  15. 微擎系统BUG漏洞解决方法汇总(原创)
  16. 如何在Ubuntu上安装Couch DB 1.5
  17. python写圆柱的体积_继承实现圆柱体面积体积的计算
  18. vc 文字转换到机内码,输入汉字和数字, 输出一串16进制码(数字-〉ASII码,汉字—〉国标码)...
  19. java基础多线程抢红包_java多线程模拟抢红包功能
  20. new 对象和Class的getInstance()方法的区别?

热门文章

  1. 面试官:聊聊微信和淘宝扫码登录背后的实现原理?
  2. 专业解决 MySQL 查询速度慢与性能差!
  3. 10 大常用软件架构模式简介
  4. 8 种常被忽视的 SQL 错误用法
  5. 涨姿势 | 服务重启后,为什么发生抖动?
  6. github的webhooks无法刷新config服务端的bus-refresh接口
  7. Java虚拟机调用jni_JNI攻略之十一――启动虚拟机调用java类
  8. 支持app需要多大的服务器,上海app开发需要多大服务器空间?
  9. 数据中心液冷技术发展分析
  10. 多雨季节 数据中心亦要“防汛”