Youth的最大化

时间限制:1000 ms | 内存限制:65535 KB 
难度: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

贪心策略:

贪心+二分: 
k个物品的最大单位价值 一定大于0且小于单个物品的最大单位价值。求出单个物品的最大单位价值,然后二分查找即可。

 #include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define imax(x,y) (x>y?x:y)
#define MAXN 10005
int n, k;
double w[MAXN], v[MAXN];
int i;
double need[MAXN];
int compare(const void * p1, const void * p2) {
return *(double *)p1 < *(double *)p2 ? : -;
}
bool judge(double x) {
// 算出当前物品达到均值x的代价,
//负数表示比均值小,正数反之
for (i = ; i < n; i++) {
need[i] = v[i] - x*w[i];
} //将need数组从大到小排序
qsort(need, n, sizeof(need[]), compare); // 取前k个,算出它们所需代价之和
// 若为正,则代表超过均值,代表均值不够大,向右区间查找;为负反之
double all_need = ;
for (i = ; i < k; i++) {
all_need += need[i];
}
return all_need >= ? true : false;
}
double binary_search(double right) {
double left = ;
while (right - left > 0.00001) {
double mid = (left + right) / ;
if (judge(mid))
left = mid;
else
right = mid;
}
return left;
}
int main(void)
{
while (scanf("%d %d", &n, &k)!=EOF) {
double max_ratio = ;
for (i = ; i < n; i++) {
scanf("%lf %lf", &w[i], &v[i]);
max_ratio = imax(max_ratio,(v[i]/w[i]));
}
//printf("%lf\n", max_ratio);
double res = binary_search(max_ratio);
printf("%.2lf\n", res);
}
return ;
}

NYOJ-914 Youth的最大化(贪心)的更多相关文章

  1. NYOJ 914 Yougth的最大化

    Yougth的最大化 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描写叙述 Yougth如今有n个物品的重量和价值各自是Wi和Vi,你能帮他从中选出k个物品使得单位重量的价 ...

  2. NYOJ 914 Yougth的最大化【二分/最大化平均值模板/01分数规划】

    914-Yougth的最大化 内存限制:64MB 时间限制:1000ms 特判: No 通过数:3 提交数:4 难度:4 题目描述: Yougth现在有n个物品的重量和价值分别是Wi和Vi,你能帮他从 ...

  3. NYOJ 1107 最高的奖励(贪心+优先队列)

    最高的奖励 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 请问:挖掘机技术哪家强?AC了告诉你! 给你N(N<=3*10^4)个任务,每个任务有一个截止完成时 ...

  4. nyoj 47——过河问题——————【贪心】

    过河问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:5   描述 在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边.如果不借助手电筒的话,大家是无论如何也不敢过桥去的 ...

  5. NYIST 914 Yougth的最大化

    Yougth的最大化时间限制:1000 ms | 内存限制:65535 KB难度:4 描述 Yougth现在有n个物品的重量和价值分别是Wi和Vi,你能帮他从中选出k个物品使得单位重量的价值最大吗? ...

  6. nyoj 208 + poj 1456 Supermarket (贪心)

    Supermarket 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 A supermarket has a set Prod of products on sal ...

  7. nyoj 14-会场安排问题 (贪心)

    14-会场安排问题 内存限制:64MB 时间限制:3000ms Special Judge: No accepted:9 submit:15 题目描述: 学校的小礼堂每天都会有许多活动,有时间这些活动 ...

  8. nyoj 448 寻找最大数(贪心专题)

    寻找最大数 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 请在整数 n 中删除m个数字, 使得余下的数字按原次序组成的新数最大, 比如当n=920813467185 ...

  9. nyoj 91 阶乘之和(贪心)

    阶乘之和 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3! ...

随机推荐

  1. ASP.NET Web安装程序

    键发布ASP.NET Web安装程序,搞WebForm的童鞋看过来... 前言:最近公司有个Web要发布,但是以前都是由实施到甲方去发布,配置,这几天有点闲,同事让我搞一个一键发布,就和安装软件那样的 ...

  2. Entity Framework实体模型 入门视频教程

    Entity Framework实体模型 入门视频教程 恢复内容开始--- 第一步 创建一个 控制台应用程序 第二步 创建一个ADO.NET 数据实体模型 DbModel.edmx 需要跟数据库进行连 ...

  3. 异步队列 Deferred

    异步队列 Deferred 背景: 移动web app开发,异步代码是时常的事,比如有常见的异步操作: Ajax(XMLHttpRequest) Image Tag,Script Tag,iframe ...

  4. Js继承小结

    Js继承小结 一直以来,对Js的继承有所认识,但是认识不全面,没什么深刻印象.于是,经常性的浪费很多时间重新看博文学习继承,今天工作不是特别忙,有幸看到了http://www.slideshare.n ...

  5. Django入门实践(一)

    Django入门实践(一) Django编程思路+入门 认识Django有一个多月了,我觉得学习Django应该先理清它的编程思路.它是典型的MVC框架(在Django里也称MTV),我觉得Djang ...

  6. 批处理清理VS工程目录(递归删除Debug, Release, ipch目录及*.sdf文件)

    用VS写程序最烦的就是VS会产生一大堆乱七八糟的东西,如Degub, Release, ipch目录,还有sdf文件,这些东西占了很大的空间,在linux下编程的话一个make clean就可以很方便 ...

  7. icon 图标下载

    1. http://www.easyicon.net/ 2.http://www.iconpng.com/

  8. MVC源码解析 - HttpRuntime解析

    先看一张图, 从这张图里, 能看到请求是如何从CLR进入HttpRuntime的. 一.AppManagerAppDomainFactory 看到这张图是从 AppManagerAppDomainFa ...

  9. Python random模块(获取随机数)常用方法和使用例子

    random.randomrandom.random()用于生成一个0到1的随机符点数: 0 <= n < 1.0 random.uniformrandom.uniform(a, b),用 ...

  10. 【锋利的Jquery】读书笔记六

    ajax优点缺点 json格式的严格 { "people": [ { "firstName": "Brett", "lastNam ...