Divide and conquer:K Best(POJ 3111)
挑选最美的珠宝
题目大意:挑选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)相关推荐
- Divide and conquer:Dropping tests(POJ 2976)
最大化平均值 题目大意:给定你n个分数,从中找出k个数,使∑a/∑b的最大值 这一题同样的也可以用二分法来做(用DP会超时,可见二分法是多么的实用呵!),大体上是这样子:假设最大的平均值是w,那么题目 ...
- 分治策略Divide and Conquer
在计算机科学中,分治法是一种很重要的算法.字面上的解释是"分而治之",通常是递归算法,就是 把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题--直到最 ...
- 分治法 Divide and Conquer思想及实际应用
分治思想 Divide and Conquer,即为分治法,基于分支递归的一种解决问题的思想方法. 分治分治,"分而治之"的意思,就是把一个复杂的原问题分成一个或多个相同子问题,而 ...
- K - Candies POJ - 3159(利用了自定义比较操作符)
K - Candies POJ - 3159 题意: 孩子 A 觉得 B 得到的糖果不能比自己多超过 c,求 n 比 1 最多能多几颗糖果 思路:DJ,松弛条件: sweet[A] > swee ...
- INF421 - Amphi 2 Divide and Conquer
INF421 - Amphi 2 Divide and Conquer 0.Quizz回顾 在数组中同时寻找最大和最小元素 Big-Oh Notation (Landau Symbols) 1. In ...
- POJ 3111 K Best 贪心 二分
题目链接: http://poj.org/problem?id=3111 题目描述: 在N个物品中让你选出K个, 使得平均价值最大 解题思路: 这是我错的代码......一会儿回来改啊......一会 ...
- POJ 3111 K Best (最大化平均值,贪心 二分)难度⭐⭐⭐
题目来源: [题意] 有n个物品的重量和价值分别是wi,vi,从中选取k个物品使得单位重量的价值最大. 输出格式: 输出一行物品的编号. #include<iostream> #inclu ...
- Divide and conquer:Drying(POJ 3104)
烘干衣服 题目大意:主人公有一个烘干机,但是一次只能烘干一件衣服,每分钟失水k个单位的水量,自然烘干每分钟失水1个单位的水量(在烘干机不算自然烘干的那一个单位的水量),问你最少需要多长时间烘干衣服? ...
- Lecture 3 Divide and Conquer
1.Divide the problem(instance) into one or more sub-problem; 2.Conquer each sub-problem recursively; ...
最新文章
- RenderMonkey基本使用方法
- 实现微服务架构-微服务架构需要解决的问题
- double 数组_寻找两个有序数组的中位数
- boost::interprocess::managed_heap_memory用法的测试程序
- 敏捷软件开发:原则、模式与实践(C#版)
- SQL Server 2005 在只有MDF文件的情况下恢复(丢失日志文件)
- SAP Spartacus 默认的 pwa,处于关闭状态还是打开状态?
- Vue CLI 3.0正式发布!
- Ranger-AdminServer安装Version2.0.0
- 判断当前窗体是否是顶级窗体
- jquery扩展提示框
- 【2022跨年】最浪漫的表白烟花,送给新的一年的自己(源码)
- shell脚本shc加密解密
- 如何用一束激光欺骗神经网络
- 微擎系统BUG漏洞解决方法汇总(原创)
- 如何在Ubuntu上安装Couch DB 1.5
- python写圆柱的体积_继承实现圆柱体面积体积的计算
- vc 文字转换到机内码,输入汉字和数字, 输出一串16进制码(数字-〉ASII码,汉字—〉国标码)...
- java基础多线程抢红包_java多线程模拟抢红包功能
- new 对象和Class的getInstance()方法的区别?