914-Yougth的最大化

内存限制:64MB 时间限制:1000ms 特判: No

通过数:3 提交数:4 难度:4

题目描述:

Yougth现在有n个物品的重量和价值分别是Wi和Vi,你能帮他从中选出k个物品使得单位重量的价值最大吗?

输入描述:

有多组测试数据

每组测试数据第一行有两个数n和k,接下来一行有n个数Wi和Vi。

(1<=k=n<=10000) (1<=Wi,Vi<=1000000)

输出描述:

输出使得单位价值的最大值。(保留两位小数)

样例输入:

复制

3 2

2 2

5 3

2 1

样例输出:

0.75

【分析】:

    Q:有n个价值和重量为vi、wi的物品,从中挑选k个使单位重量的价值最大

    A:
此题不能直接用贪心法:直接按物品的单位价值排序,然后依次取k个;
我们要求的最大值是,价值之和/重量之和;而上面所说是单位价值之和。
------------------------------------------变形贪心
二分搜索法模型:
条件C(x):可以挑选使得单位重量的物品价值不小于x->求满足条件的最大x->如何判断C(x)
价值和/重量和>=x
价值和-重量和*x>=0
和(价值-重量*x)>=0
可以对(价值-重量*x)的值进行贪心的选取,选取最大的k个 和>=0

和最大化最小值类似,最大化平均值也可以通过二分法求得。

比如下面这个经典的问题:

有n个物品的重量和价值分别是wi和vi,从中选出k个物品使得单位重量价值最大。

样例输入:

3 2

2 2

5 3

2 1

1

2

3

4

5

样例输出:

0.75

分析:

一般先想到的是将每个物品的单位重量价值算出来,然后排个序,从大到小贪心进行选择,可惜这样是不对的,这样不能保证最后一定是最大平均值,直接用贪心对于这类要涉及多个因素比如求最大平均值的问题就显得不那么正确了。

那么我们这样分析这个问题:

令C(x)为可以选择使得单位重量的价值不小于x。

这样就可以用二分法来解决,不断二分x进行判断,取最大。

我们继续分析:

 ∑vi / ∑wi 这个式子是我们需要求的单位重量的价值。
i∈s i∈s

那么就求是否满足:

 ∑vi / ∑wi >= x
i∈s i∈s

转换一下得到:

∑(vi - x*wi) >= 0
i∈s

判断这个式子是否成立即可。这下就可以用一个数组来保存vi - x * wi 的值,并进行排序,从大到小贪心地进行选择求和,如果求和的值大于0,那么此时 的x就是成立的。

【代码】:

#include<bits/stdc++.h>

const double eps = 1e-8;
const int maxn = 1e6+5;
#define inf 0x3f3f3f3f
#define ll long long
using namespace std;
/*
有n个物品的重量和价值分别是wi和vi
从中选出k个物品使得单位重量价值最大 */
int n,k;
int w[maxn],v[maxn];
double y[maxn];
bool cmp(int a,int b)
{
return a>b;
}
bool check(double x)
{
for(int i=0;i<n;i++)
y[i] = v[i] - w[i] * x;
sort(y,y+n);
double sum = 0;
for(int i=0; i<k; i++)
sum += y[n-i-1];
return sum>=0;
}
void solve()
{
double l = 0, r =inf, mid;
for(int i=0;i<100;i++)
{
mid = (l+r)/2;
if(check(mid))
l=mid;
else r=mid;
}
printf("%.2f\n",r);
}
int main()
{
while(~scanf("%d%d",&n,&k))
{
for(int i=0;i<n;i++)
cin>>w[i]>>v[i];
solve();
}
}

NYOJ 914 Yougth的最大化【二分/最大化平均值模板/01分数规划】的更多相关文章

  1. poj 2976 Dropping tests (二分搜索之最大化平均值之01分数规划)

    Description In a certain course, you take n tests. If you get ai out of bi questions correct on test ...

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

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

  3. POJ - 2976 Dropping tests(01分数规划---二分(最大化平均值))

    题意:有n组ai和bi,要求去掉k组,使下式值最大. 分析: 1.此题是典型的01分数规划. 01分数规划:给定两个数组,a[i]表示选取i的可以得到的价值,b[i]表示选取i的代价.x[i]=1代表 ...

  4. [转]01分数规划算法 ACM 二分 Dinkelbach 最优比率生成树 最优比率环

    01分数规划 前置技能 二分思想最短路算法一些数学脑细胞? 问题模型1 基本01分数规划问题 给定nn个二元组(valuei,costi)(valuei,costi),valueivaluei是选择此 ...

  5. 【poj 2976】Dropping tests(算法效率--01分数规划 模版题+二分){附【转】01分数规划问题}

    P.S.又是一个抽时间学了2个小时的新东西......讲解在上半部分,题解在下半部分. 先说一下转的原文:http://www.cnblogs.com/perseawe/archive/2012/05 ...

  6. 【题解】 [HNOI2009] 最小圈 (01分数规划,二分答案,负环)

    题目背景 如果你能提供题面或者题意简述,请直接在讨论区发帖,感谢你的贡献. 题目描述 对于一张有向图,要你求图中最小圈的平均值最小是多少,即若一个圈经过k个节点,那么一个圈的平均值为圈上k条边权的和除 ...

  7. POJ2728 最小比率生成树/0-1分数规划/二分/迭代(迭代不会)

    用01分数规划 + prime + 二分 竟然2950MS惊险的过了QAQ 前提是在TLE了好几次下过的 = = 题目意思:有n个村庄,村庄在不同坐标和海拔,现在要对所有村庄供水,只要两个村庄之间有一 ...

  8. 【BZOJ 4819】 4819: [Sdoi2017]新生舞会 (0-1分数规划、二分+KM)

    4819: [Sdoi2017]新生舞会 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 601  Solved: 313 Description 学校 ...

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

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

随机推荐

  1. hdu 2199 Can you solve this equation? (二分法)

    Can you solve this equation? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...

  2. (转载)Java中如何遍历Map对象的4种方法

    在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...

  3. DPDK 分析

    DPDK 分析 来源 https://www.cnblogs.com/bakari/p/8404650.html 高性能网络技术 随着云计算产业的异军突起,网络技术的不断创新,越来越多的网络设备基础架 ...

  4. 【Cf edu 30 B. Balanced Substring】

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  5. Switf与OC混合开发流程

    看着身边越来越多的小伙伴转入Swift,本人也跟随潮流,转战Swift了~下面是初步写入的一个Swift项目框架. 1.创建项目,这个应该不用说了,语言swift 2.CocoaPods 导入第三方 ...

  6. JQuery如何监听DIV内容变化

    这几天在做一个微博的接入,需要判断微博是否被关注,要检查微博标签的DIV是否有“已关注”的字符,但这个DIV的内容是微博JSSDK动态生 成.$("#id").html()是获取不 ...

  7. 设置查看java的源程序

    1.点 “window”-> "Preferences" -> "Java" -> "Installed JRES" 2. ...

  8. [洛谷P2113] 看球泡妹子

    洛谷题目链接:看球泡妹子 题目背景 2014年巴西世界杯开幕了,现在满城皆是世界杯,商家们利用它大赚一笔,小明和小红也借此机会增进感情. 题目描述 本届世界杯共有N支球队,M场比赛.男球迷小明喜欢看比 ...

  9. 【BZOJ3450】Easy [期望DP]

    Easy Time Limit: 10 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description 某一天WJMZBMR在打osu~~ ...

  10. 【Foreign】染色 [LCT][线段树]

    染色 Time Limit: 20 Sec  Memory Limit: 256 MB Description Input Output Sample Input 13 0 1 0 2 1 11 1 ...