NYOJ 914 Yougth的最大化【二分/最大化平均值模板/01分数规划】
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分数规划】的更多相关文章
- 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 ...
- poj 3111 K Best (二分搜索之最大化平均值之01分数规划)
Description Demy has n jewels. Each of her jewels has some value vi and weight wi. Since her husband ...
- POJ - 2976 Dropping tests(01分数规划---二分(最大化平均值))
题意:有n组ai和bi,要求去掉k组,使下式值最大. 分析: 1.此题是典型的01分数规划. 01分数规划:给定两个数组,a[i]表示选取i的可以得到的价值,b[i]表示选取i的代价.x[i]=1代表 ...
- [转]01分数规划算法 ACM 二分 Dinkelbach 最优比率生成树 最优比率环
01分数规划 前置技能 二分思想最短路算法一些数学脑细胞? 问题模型1 基本01分数规划问题 给定nn个二元组(valuei,costi)(valuei,costi),valueivaluei是选择此 ...
- 【poj 2976】Dropping tests(算法效率--01分数规划 模版题+二分){附【转】01分数规划问题}
P.S.又是一个抽时间学了2个小时的新东西......讲解在上半部分,题解在下半部分. 先说一下转的原文:http://www.cnblogs.com/perseawe/archive/2012/05 ...
- 【题解】 [HNOI2009] 最小圈 (01分数规划,二分答案,负环)
题目背景 如果你能提供题面或者题意简述,请直接在讨论区发帖,感谢你的贡献. 题目描述 对于一张有向图,要你求图中最小圈的平均值最小是多少,即若一个圈经过k个节点,那么一个圈的平均值为圈上k条边权的和除 ...
- POJ2728 最小比率生成树/0-1分数规划/二分/迭代(迭代不会)
用01分数规划 + prime + 二分 竟然2950MS惊险的过了QAQ 前提是在TLE了好几次下过的 = = 题目意思:有n个村庄,村庄在不同坐标和海拔,现在要对所有村庄供水,只要两个村庄之间有一 ...
- 【BZOJ 4819】 4819: [Sdoi2017]新生舞会 (0-1分数规划、二分+KM)
4819: [Sdoi2017]新生舞会 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 601 Solved: 313 Description 学校 ...
- POJ - 3111 K Best 0-1分数规划 二分
K Best Time Limit: 8000MS Memory Limit: 65536K Total Submissions: 12812 Accepted: 3290 Case Time ...
随机推荐
- 【BZOJ 1770 】 [Usaco2009 Nov]lights 燈 dfs+异或方程组
这道题明显是异或方程组,然而解不一定唯一他要的是众多解中解为1的数的最小值,这个时候我们就需要dfs了我们dfs的时候就是枚举其有不确定解的数上选0或1从而推知其他解,由于我们dfs的时候先0后1,虽 ...
- com.mongodb.MongoException$CursorNotFound: cursor not found on server异常处理
java链接MongoDB处理大量数据时经常碰到cursor not found 的异常,其实是超时所致 Exception in thread "main" com.mongod ...
- 团队代码中Bug太多怎么办?怎样稳步提高团队的代码质量
最近负责的Android APP项目,由于团队成员变动.界面改版导致代码大幅修改等原因,产品发布后屡屡出现BUG导致的程序崩溃. 经过对异常统计和代码走读,BUG主要集中在空指针引起的NullPoin ...
- Java多线程-一个简单的线程,实现挂起和恢复的功能
public class MySprite implements Runnable { /* * 线程用变量 */ private boolean running = false; private b ...
- sperman系数
https://baike.baidu.com/item/spearman%E7%9B%B8%E5%85%B3%E7%B3%BB%E6%95%B0/7977847?fr=aladdin https:/ ...
- 利用vue-cli创建Vue项目
1.安装node.js:Node.js安装包及源码下载地址为:https://nodejs.org/en/download/. 配置参考:http://www.runoob.com/nodejs/no ...
- 转:极小极大搜索方法、负值最大算法和Alpha-Beta搜索方法
转自:极小极大搜索方法.负值最大算法和Alpha-Beta搜索方法 1. 极小极大搜索方法 一般应用在博弈搜索中,比如:围棋,五子棋,象棋等.结果有三种可能:胜利.失败和平局.暴力搜索,如果想通 ...
- 【UVALive4685-Succession】树形DP
http://acm.hust.edu.cn/vjudge/problem/14338 题意:给定一棵树,每个点有一个值,让你选择k个点,并且这k个点是连在一起的(从任意一个点出发,可以遍历完所有选择 ...
- python 写 excel 模块 : xlwt
主要来自:[ python中使用xlrd.xlwt操作excel表格详解 ] 为了方便阅读, 我将原文两个模块拆分为两篇博文: [ python 读 excel 模块: xlrd ] [ python ...
- Ubuntu 15.10 安装比特币客户端
下载 git clone https://github.com/bitcoin/bitcoin.git cd bitcoin ./autogen.sh 安装依赖包: ++-dev sudo apt-g ...