Yougth的最大化

时间限制: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

典型的0-1分数规划问题,用二分+贪心求解
首先必须知道单位重要的的最大价值的取值范围,其最小为0,最大不超过单个物品的单位重量的最大价值
证明如下:
  假设第i个物品的单位重量的价值最大,则对于任意的第j个物品的有Vj/Wj<=Vi/Wi 即 Vi*Wj-Vj*Wi >= 0

则j,i两个物品的单位重量的价值为(Vi+Vj)/(Wi+Wj),
Vi/Wi-(Vi+Vj)/(Wi+Wj) = (Vi*Wj-Vj*Wi)/(Wi*(Wi+Wj)) >=0
Vi/Wi>=(Vi+Vj)/(Wi+Wj)
故单位重量的的最大价值不超过单个物品的单位重量的最大价值
找到单位重量的的最大价值的范围既可以用二分搜索找到满足条件的值即可
由于(v1+v2+...+vk)/(w1+w2+...+wk) = value
则(v1+v2+...+vk)=value*(w1+w2+...+wk)
二分搜索时
如果value比单位重量的最大值大,则
(v1+v2+...+vk)-value*(w1+w2+...+wk) < 0 说明所求的值小于value
如果value比单位重量的最大值小,则
(v1+v2+...+vk)-value*(w1+w2+...+wk) > 0 说明所求值大于value

#include <iostream>
#include <vector>
#include <algorithm>
#include <numeric>
#include <cstdio>
using namespace std; struct Good{
float w;
float v;
Good(double ww=0.0, double vv=0.0):w(ww),v(vv){}
}; vector<Good> goods();
int n,k; bool judge(float value){
vector<float> diffValue(n);
for(int i = ; i < n; ++ i)
diffValue[i] = goods[i].v-goods[i].w*value;
sort(diffValue.begin(),diffValue.end());
float sum = accumulate(diffValue.rbegin(),diffValue.rbegin()+k,0.0);
return sum >= ? true:false;
} float binarySearch(float maxv){
float left = , right = maxv;
for(int i = ; i < ; ++ i){
float mid =(left+right)/;
if(judge(mid)) left = mid;
else right = mid;
}
return left;
} int main(){
while(cin >>n >> k){
float maxv = ;
for(int i = ; i < n; ++i){
cin >>goods[i].w >>goods[i].v;
maxv = max(maxv,goods[i].v/goods[i].w );
}
printf("%0.2f\n",binarySearch(maxv));
}
}


              

ACM Yougth的最大化的更多相关文章

  1. Yougth的最大化(好题,二分查找 0 1分数规划)

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

  2. NYOJ 914 Yougth的最大化

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

  3. NYIST 914 Yougth的最大化

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

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

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

  5. 问题 L: Yougth的最大化

    题目描述 Yougth现在有n个物品的重量和价值分别是Wi和Vi,你能帮他从中选出k个物品使得单位重量的价值最大吗? 输入 有多组测试数据 每组测试数据第一行有两个数n和k,接下来一行有n个数Wi和V ...

  6. nyoj914Yougth的最大化(二分搜索 + 贪心)

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

  7. nyoj--914--Yougth的最大化(二分查找)

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

  8. [ACM] POJ 3258 River Hopscotch (二分,最大化最小值)

    River Hopscotch Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6697   Accepted: 2893 D ...

  9. ACM 最大化平均值问题总结

    主要是应用c(x)的满足条件有共通之处: c(x)表示要求解的那个表达式不小于x 可以找到表达式 v/w>=x 如果 v-x*w>0 说明有贡献 那就把贡献最大的找出来 如果找出来之后 s ...

随机推荐

  1. mysql 5.6.33 重置密码后报错

    [root@ Desktop]# mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; o ...

  2. .net学习笔记---xml序列化

    XML序列化是将对象的公共属性和字段转换为XML格式,以便存储或传输的过程.反序列化则是从XML输出中重新创建原始状态的对象.XML序列化中最主要的类是XmlSerializer类.它的最重要的方法是 ...

  3. MVC – 14.ajax异步请求

    14.1.配置文件 14.2.AjaxHelper – 异步链接按钮 14.3.AjaxHelper – 异步表单 AjaxOptions常见属性: 14.4.AjaxOptions对象生成[对应]触 ...

  4. Delphi中的异常处理

    转载:http://www.cnblogs.com/doit8791/archive/2012/05/08/2489471.html 以前写Delphi程序一直不注意异常处理,对其异常处理的机制总是一 ...

  5. Delphi中怎么结束线程(这个线程是定时执行的)(方案二)

    上篇博客中提出了一个问题:怎么结束一个定时循环执行的线程,并给出了一个解决方案,但是又出现了一个问题,详细去参考上一篇博客. 然后出去撒了个尿,突然脑子里出现了一个想法(看来工作和思考久了,出去走走, ...

  6. MVC4 WEBAPI(一)使用概述

    所谓概述,也就是总结一些WEB API常用的使用用法.MVC APIWEB是一个轻量级的服务接口,完全符合RestFul框架设计,每个URL代表一种资源,使用方便,没有WCF那么庞大,但是麻雀虽小五脏 ...

  7. 【翻译十】java-固定锁和同步

    Intrinsic Locks and Synchronization Synchronization is built around an internal entity known as the  ...

  8. JavaScript - Html 中使用JavaScript

    把JavaScript插入到HTML页面要使用<script>元素.使用这个元素可以把JavaScript嵌入到HTML页面中,让脚本与标记混合在一起:也可以包含外部的JavaScript ...

  9. WPF 创建自定义窗体

    在前面的一篇博客"WPF 自定义Metro Style窗体",展示了如何创建一个类似于Metro Style的Window,并在程序中使用.但是这个窗体不能够自由的改变大小.今天的 ...

  10. Element selector doesn't have required

    这个错误是因为创建xml文件时文件类型弄成了layout xml file ,这样就会自动到layout文件夹下 应该是drawable resource file