ACM Yougth的最大化
Yougth的最大化
- 描述
-
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的最大化的更多相关文章
- Yougth的最大化(好题,二分查找 0 1分数规划)
Yougth的最大化 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 Yougth现在有n个物品的重量和价值分别是Wi和Vi,你能帮他从中选出k个物品使得单位重量的价 ...
- NYOJ 914 Yougth的最大化
Yougth的最大化 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描写叙述 Yougth如今有n个物品的重量和价值各自是Wi和Vi,你能帮他从中选出k个物品使得单位重量的价 ...
- NYIST 914 Yougth的最大化
Yougth的最大化时间限制:1000 ms | 内存限制:65535 KB难度:4 描述 Yougth现在有n个物品的重量和价值分别是Wi和Vi,你能帮他从中选出k个物品使得单位重量的价值最大吗? ...
- NYOJ 914 Yougth的最大化【二分/最大化平均值模板/01分数规划】
914-Yougth的最大化 内存限制:64MB 时间限制:1000ms 特判: No 通过数:3 提交数:4 难度:4 题目描述: Yougth现在有n个物品的重量和价值分别是Wi和Vi,你能帮他从 ...
- 问题 L: Yougth的最大化
题目描述 Yougth现在有n个物品的重量和价值分别是Wi和Vi,你能帮他从中选出k个物品使得单位重量的价值最大吗? 输入 有多组测试数据 每组测试数据第一行有两个数n和k,接下来一行有n个数Wi和V ...
- nyoj914Yougth的最大化(二分搜索 + 贪心)
Yougth的最大化 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 Yougth现在有n个物品的重量和价值分别是Wi和Vi,你能帮他从中选出k个物品使得单位重量的价值最大吗 ...
- nyoj--914--Yougth的最大化(二分查找)
Yougth的最大化 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 Yougth现在有n个物品的重量和价值分别是Wi和Vi,你能帮他从中选出k个物品使得单位重量的价值最 ...
- [ACM] POJ 3258 River Hopscotch (二分,最大化最小值)
River Hopscotch Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6697 Accepted: 2893 D ...
- ACM 最大化平均值问题总结
主要是应用c(x)的满足条件有共通之处: c(x)表示要求解的那个表达式不小于x 可以找到表达式 v/w>=x 如果 v-x*w>0 说明有贡献 那就把贡献最大的找出来 如果找出来之后 s ...
随机推荐
- jquery学习笔记---闭包,原型链,this关键字
网上的资料很多,关于闭包,原型链,面向对象之内的.本人也有一点自己的总结. 关于this: this 的值取决于 function 被调用的方式,一共有四种, 如果一个 function 是一个对象的 ...
- Asp.net窄屏页面 手机端新闻列表
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SearchNotice.a ...
- 重温WCF之群聊天程序(十)
完成的效果图: 服务器端代码: using System; using System.Collections.Generic; using System.Linq; using System.Serv ...
- windows 10 上office2016 word崩溃的解决方案
方案1:--个人试验可行,把如下路径改成自己系统路径 C:Documents and Settings/Administrator/application/data/microsoft/templat ...
- 【openGL】画正弦函数图像
#include "stdafx.h" #include <GL/glut.h> #include <stdlib.h> #include <math ...
- 解决mysql无法插入中文数据及插入后显示乱码的问题
(1)废话不多说就是使用mysql数据库的时候无法输入中文,可以输入中文后显示的又是乱码!! (2开始解决问题: 第一步:找到安装mysql的目录找到 my.ini 文件: 第二步:使用记事本打开my ...
- Swipe JS – 移动WEB页面内容触摸滑动类库
想必做移动前端的同学经常会接到这样子的一个需求,就是在移动设备页面上的banner图能够用手指触摸左右或上下的滑动切换,这在移动设备是个很常见的一个效果,其用户体验远甚于点击一个按钮区域,通过手指的触 ...
- NS2中trace文件分析
ns中模拟出来的时间最终会以trace文件的形式告诉我们,虽然说一般都是用awk等工具分析trace文件,但是了解trace文件的格式也是必不可少的.下面就介绍一下无线网络模拟中trace文件的格式. ...
- 一个简单的Object Hook的例子(win7 32bit)
Object Hook简单的来说就是Hook对象,这里拿看雪上的一个例子,因为是在win7 32位上的,有些地方做了些修改. _OBJECT_HEADER: kd> dt _OBJECT_HEA ...
- MFC GDI绘图基础
一.关于GDI的基本概念 什么是GDI? Windows绘图的实质就是利用Windows提供的图形设备接口GDI(Graphics Device Interface)将图形绘制在显示器上. 在Wind ...