POJ 3111 K Best 二分 最大化平均值
来源:互联网 发布:java 上级目录 编辑:程序博客网 时间:2024/05/22 08:27
题目链接: 点我
题目大意: 给出物品的w和v,选出k个物品使得
s值最大。
题目分析: 不能直接按照v/w贪心来做,举个反例:
w v
2 2
5 3
2 1
选1和3,结果是0.75,但选1和2,结果是5/7 = 0.7140
下面搬运一下《挑战程序设计》
Problem: 3111 User: ChenyangDuMemory: 1860K Time: 4360MSLanguage: G++ Result: Accepted#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn = 100000+5,INF = 0x7fffffff;int n,m;double mid;struct jew {int v,w,id;}in[maxn];bool cmp (jew a,jew b){ double aa = (double)a.v - mid*(double)a.w; double bb = (double)b.v - mid*(double)b.w; return aa>bb;}int C(double x){ double sum = 0; for(int i=0;i<m;i++){ jew a = in[i]; sum += (double)a.v - x*(double)a.w; if(sum<0)return i; } return m;}int main(){ //freopen("in.txt","r",stdin); scanf("%d%d",&n,&m); for(int i=0;i<n;i++){ scanf("%d%d",&in[i].v,&in[i].w); in[i].id = i+1; } double l = 0,r = INF; int T = 52; while(T--){ mid = (l+r)/2; sort(in,in+n,cmp); if(C(mid) >= m)l = mid; else r = mid; } for(int i=0;i<m;i++) printf("%d ",in[i].id); fclose(stdin); return 0;}
阅读全文
0 0
- POJ 3111 K Best 【二分:最大化平均值】
- POJ 3111 K Best 二分 最大化平均值
- poj K Best 最大化平均值 二分搜索
- POJ 3111 K Best(二分搜索,最大化平均值)
- poj 3111 K Best 二分搜索 最大化平均值
- POJ 3111 K Best(二分——最大化平均值)
- poj 3111 K Best(二分-最大化平均值)
- POJ 3111 K Best 最大化平均值
- POJ 3111 K Best(最大化平均值)
- POJ 3111 K Best(最大化平均值)
- POJ 3111 K Best &&NYOJ 914 (二分+ 贪心,最大化平均值)
- POJ3111 K Best 最大化平均值(二分)
- POJ3111 K Best(二分 最大化平均值)
- poj 3111 K Best && poj 2976(最大化平均值)
- POJ 3111 K Best <最大化平均,二分>
- POJ 3111 K Best 二分(最小化平均值)
- 7_13_F题 K Best(二分、最大化平均值)
- K Best(最大化平均值(二分搜索))
- Android入门教程I(视频)
- HTML+CSS编写静态网站-31 添加About页面
- 关于孙振耀在清华大学和退休演讲的读后感
- 使用社区版VS创建第一个控制台程序
- MySQL学习划重点(《MYSQL必知必会》总结)之插入数据
- POJ 3111 K Best 二分 最大化平均值
- IEDA学习之配置maven环境变量
- 剑指offer——第一个只出现一次的字符
- 细说反射,Java 和 Android 开发者必须跨越的坎
- Linux(centos)的入门课程I(视频)
- 全民飞机大战Java
- Android开发中第三方炫酷的控件
- php 设计模式(组合模式一)
- 二十三、解释器模式——设计模式学习笔记