二分+01分数规划+最大化平均值 Dropping tests POJ - 2976

题意:

给你若n个分数,分子a[i]a[i]a[i],分母b[i]b[i]b[i],使满足公式100⋅∑i=1nai∑i=1nbi100\cdot\tfrac{\sum_{i=1}^{n} a_{i}}{\sum_{i=1}^{n} b_{i}}100i=1nbii=1nai,求任意去掉k个分数后,公式结果最大值。

题目:

In a certain course, you take n tests. If you get aia_{i}ai out of bib_{i}bi questions correct on test i, your cumulative average is defined to be

100⋅∑i=1nai∑i=1nbi100\cdot\tfrac{\sum_{i=1}^{n} a_{i}}{\sum_{i=1}^{n} b_{i}}100i=1nbii=1nai

Given your test scores and a positive integer k, determine how high you can make your cumulative average if you are allowed to drop any k of your test scores.

Suppose you take 3 tests with scores of 5/5, 0/1, and 2/6. Without dropping any tests, your cumulative average is 100⋅5+0+25+1+6100\cdot\tfrac{5+0+2}{5+1+6}1005+1+65+0+2. However, if you drop the third test, your cumulative average becomes 100⋅5+05+1≈83.33≈83100\cdot\tfrac{5+0}{5+1}\approx83.33\approx831005+15+083.3383.

Input

The input test file will contain multiple test cases, each containing exactly three lines. The first line contains two integers, 1 ≤ n ≤ 1000 and 0 ≤ k < n. The second line contains n integers indicating ai for all i. The third line contains n positive integers indicating bi for all i. It is guaranteed that 0 ≤ ai ≤ bi ≤ 1, 000, 000, 000. The end-of-file is marked by a test case with n = k = 0 and should not be processed.

Output

For each test case, write a single line with the highest cumulative average possible after dropping k of the given test scores. The average should be rounded to the nearest integer.

Sample Input

3 1
5 0 2
5 1 6
4 2
1 2 7 9
5 6 7 9
0 0

Sample Output

83
100

Hint

To avoid ambiguities due to rounding errors, the judge tests have been constructed so that all answers are at least 0.001 away from a decision boundary (i.e., you can assume that the average is never 83.4997).

分析:

  • 01分数规划:
    简单的来说,就是有一些二元组(ai,bi),从中选取一些二元组,使得∑ai / ∑bi最大(最小)。
    这种题一类通用的解法就是,我们假设x = ∑ai / ∑bi的最大(小)值,那么就有x * ∑ai = ∑bi ,即∑ai - x * ∑bi= 0。也就是说,当某一个值x满足上述式子的时候,它就是要求的值。我们可以想到枚举……不过再想想,这个可以二分答案。
    所以我们直接二分答案,当上述式子>0,说明答案小了,<0则说明答案大了,这样计算即可。
    01分数规划问题相关算法详解

AC代码:

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
const int M=1e3+10;
const double eps=1e-4;
int n,m;
double a[M],b[M],c[M];
bool cmp(double u,double v){return u>v;
}
bool dfs(double x){for(int i=0;i<n;i++){c[i]=a[i]-x*b[i];}sort(c,c+n,cmp);double ans=0.0;for(int i=0;i<n-m;i++)ans+=c[i];if(ans>=0) return true;return false;
}
int main(){while(~scanf("%d%d",&n,&m)){if(n==0&&m==0)break;for(int i=0;i<n;i++)scanf("%lf",&a[i]);for(int i=0;i<n;i++)scanf("%lf",&b[i]);double r=0.0,l=1.0;while(l-r>eps){double mid=(r+l)/2;if(dfs(mid)) r=mid;else l=mid;}printf("%.0f\n",r*100);}return 0;
}

基本01分数规划问题

给定 n 个二元组 (ai,bia_{i},b_{i}ai,bi ) aia_{i}ai是选择此二元组获得的价值(非负),bib_{i}bi是选择此二元组付出的代价(非负),设 xix_{i}xi (xix_{i}xi ∈ { 0 , 1 } ) 代表第 i个二元组的选与不选,最大(小)化下式
max(ormax(ormax(or min)min)min) r=∑i=1nai⋅xi∑i=1nbi⋅xir=\tfrac{\sum_{i=1}^{n} a_{i}\cdot x_{i}}{\sum_{i=1}^{n} b_{i}\cdot x_{i}}r=i=1nbixii=1naixi
下面先说最大化

解决方法:二分法

设 r最大值为r∗r^{∗}r
r∗r^{∗}r=∑i=1nai⋅xi∑i=1nbi⋅xi=\tfrac{\sum_{i=1}^{n} a_{i}\cdot x_{i}}{\sum_{i=1}^{n} b_{i}\cdot x_{i}}=i=1nbixii=1naixi
⇔\Leftrightarrow ∑ai⋅xi−r∗⋅∑bi⋅xi=0\sum a_{i}\cdot x_{i}-r^{*}\cdot\sum b_{i}\cdot x_{i}=0aixirbixi=0
设一个函数,自变量为 r值,
f(r)f ( r )f(r) = ∑ai⋅xi−r∗⋅∑bi⋅xi\sum a_{i}\cdot x_{i}-r^{*}\cdot\sum b_{i}\cdot x_{i}aixirbixi

观察这个函数,假如xi{x_{i}}xi固定,则这个函数就是坐标系中一条直线( y = B − A ⋅ x),每一组xix_{i}xi对应着一条直线,这些直线斜率非正(因为 − A = − ∑bi⋅xib_{i} ⋅ x_{i}bixi ≤ 0),纵截距非负(因为 B = ∑ai⋅xi≥0)a_{i}⋅ x_{i} ≥ 0)aixi0),如图1。
在这里插入图片描述

对于每一条直线,当f(r)=0f ( r ) = 0f(r)=0时,横截距就是这一组的 r,那么r∗r^{*}r 就是每条直线横截距的最大值(每组xix_{i}xi对应r的最大值)如图2。
在这里插入图片描述

在图中上任取一条垂直x轴的竖线,
如果存在直线与这条竖线的交点纵坐标为正,那么最优值一定在当前竖线的右侧;
如果所有直线与这条竖线交点纵坐标为负,那么最优值一定在当前竖线的左侧;
如果所有直线与这条竖线交点纵坐标非正且存在直线与这条竖线交点纵坐标为0,那么当前竖线横坐标即为最优值r∗r^{*}r

按照这个思想,可以二分答案r,那么二分时如何进行判断呢?

选择一个 r时需要判断所有 f(r)f ( r )f(r)的最大值是否为0,如果 maxm a xmax {f(r)f ( r )f(r) } > 0则 r < r∗r^{∗}r
怎样求 maxf(r)m a x { f ( r ) }maxf(r)?
f(r)f ( r )f(r) = ∑ai⋅xi−r⋅∑bi⋅xi\sum a_{i}\cdot x_{i}-r\cdot\sum b_{i}\cdot x_{i}aixirbixi
⇔\Leftrightarrow∑(ai−r⋅bi)⋅xi\sum( a_{i}-r\cdot b_{i})\cdot x_{i}airbi)xi
二分一个 r时,每个二元组的(ai−r⋅bi)⋅xi( a_{i}-r\cdot b_{i})\cdot x_{i}airbi)xi都可以求出,设其为weightiweight_{i}weighti,现在的目标就是找到一组 xix_{i}xi使得 ∑ wighti⋅xiw i g h t _{i} ⋅ x_{ i}wightixi 最大(即求maxf(r)m a x { f ( r ) }maxf(r))。怎么找到这一组xix_{i}xi,或者直接求得 maxf(r)m a x { f ( r ) }maxf(r) 呢?具体问题具体分析,经常借助最短路算法判断是否存在负环。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/309405.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(四)

系列文章使用 abp cli 搭建项目给项目瘦身&#xff0c;让它跑起来完善与美化&#xff0c;Swagger登场数据访问和代码优先自定义仓储之增删改查统一规范API&#xff0c;包装返回模型再说Swagger&#xff0c;分组、描述、小绿锁接入GitHub&#xff0c;用JWT保护你的API异常处理和…

莫比乌斯反演/容斥 +2020ICPC 江西省大学生程序设计竞赛 A Simple Math Problem

题目描述 输入描述: 输出描述: 示例1 输入 3 输出 5 分析&#xff1a; 1.这个题其实考的是一个莫比乌斯反演题&#xff0c;但是由于我知识储备不够&#xff0c;没有看出来&#xff0c;题目给的范围可以瞎搞一下&#xff0c;所以下面容斥可以过。 2.转换一下就是一道经典的…

猎鹰与龙飞船基于Linux,采用C++、Chromium与JS开发

最近两天科技界最重大的事件莫过于马斯克的 SpaceX 成功实现了猎鹰 9 号&#xff08;Falcon 9&#xff09;带着龙飞船&#xff08;Crew Dragon&#xff09;成功发射&#xff0c;并使飞船与国际空间站对接&#xff0c;将 NASA 两名宇航员送上了轨道前哨。背后关于 Falcon 9 与 C…

博客系统知多少:揭秘那些不为人知的学问(四)

点击上方关注“汪宇杰博客” ^_^上篇《博客系统知多少&#xff1a;揭秘那些不为人知的学问&#xff08;三&#xff09;》介绍了博客协议或标准。本篇终章介绍设计博客系统有哪些知识点。1.“博客”的前世今生2.我的博客故事3.谁是博客的受众&#xff1f;4. 博客基本功能设计要点…

Azure 国际版与中国版服务列表对(2020年6月版)

点击上方关注“汪宇杰博客” ^_^对于选择Azure平台的用户来说&#xff0c;会面临选择国内还是国际版的问题。由于一些原因&#xff0c;由世纪互联运营的中国大陆版Azure无法落地所有的国际版服务。相比几年前&#xff0c;情况已经有了一定的改善。本文列出了国际版和国内版Azur…

解读三组容易混淆的Dockerfile指令

长话短说&#xff0c;今天分享三组容易混淆的Dockerfile指令&#xff0c; 帮助大家编写更优雅的Dockfile文件、构建更纯净的Docker镜像。COPY vs ADDCOPY、ADD主体功能类似&#xff1a;从指定位置src拷贝文件到Docker镜像dest。COPY <src>... <dest> ADD <src&…

ASP.NET Core使用Nacos SDK访问阿里云ACM

背景 前段时间&#xff0c;cranelee 在Github上给老黄提了个issues&#xff0c; 问到了如何用Nacos的SDK访问阿里云ACM。https://github.com/catcherwong/nacos-sdk-csharp/issues/13刚看到这个issues的时候&#xff0c;老黄也是觉得一脸懵逼&#xff0c;好像这两者没有什么必然…

为.netcore助力--WebApiClient正式发布core版本

1、前言NCC WebApiClient 已成熟稳定&#xff0c;发布了WebApiClient.JIT 和 WebApiClient.AOT 两个 NuGet 包&#xff0c;累计近 10w 次下载。我对它的高可扩展性设计相当满意和自豪&#xff0c;但 WebApiClient 并不因此而停下脚步&#xff0c;在一年前&#xff0c;我产生了编…

一个static和面试官扯了一个小时,舌战加强版

一&#xff1a;背景1. 讲故事最近也是奇怪&#xff0c;在社区里看到好几篇文章聊static 的玩法以及怎么拿这个和面试官扯半个小时&#xff0c;有点意思&#xff0c;点进去看都是java版的&#xff0c;这就没意思了&#xff0c;怎么也得有一篇和面试官扯C# 中的 static用法撒&…

数据结构整理中。。。

目录栈队列链表单向链表双向链表向链表中插入&#xff08;写入&#xff09;数据单向链表单向循环链表双向循环链表从链表中删除数据单向&#xff08;循环&#xff09;链表双向循环链表哈希表哈希函数冲突拉链法闭散列法并查集启发式合并&#xff08;按秩合并&#xff09;带权并…

.NET开发者省份分布排名

什么叫.NET开发者省份分布排名呢&#xff1f; 顾名思义&#xff0c;这几个词大家都认识&#xff0c;.NET开发者都集中在城市&#xff0c;涵盖一线城市到五线城市。排名的方法非常简单粗暴&#xff0c;就是根据本公众号&#xff08;dotnet跨平台&#xff09;的省份订阅读者数量排…

创建型模式——单例模式

一、 实验目的与要求 1.练习使用单例模式。设计相关的模拟场景并进行实施&#xff0c;验证模式特性&#xff0c;掌握其优缺点。 2.实验结束后&#xff0c;对相关内容进行总结。 二、实验内容 1.模式应用场景说明 在山区或者边远地区火车站往往只有一个窗口在买票&#xff0c;但…

Sql Server之旅——终点站 nolock引发的三级事件的一些思考

曾今有件事情让我记忆犹新&#xff0c;那年刚来携程不久&#xff0c;马上就被安排写一个接口&#xff0c;供企鹅公司调用他们员工的差旅信息&#xff0c;然后我就三下五除二的给写好了&#xff0c;上线之后&#xff0c;大概过了一个月。。。DBA那边报告数据库出现大量锁超时&am…

创建型模式——原型模式

一、 实验目的与要求 1.练习使用单一模式。设计相关的模拟场景并进行实施&#xff0c;验证模式特性&#xff0c;掌握其优缺点。 2.实验结束后&#xff0c;对相关内容进行总结。 二、实验内容 1.模式应用场景说明 原型模式&#xff1a;在需要一个类的大量对象的时候&#xff0c;…

现在就是.Net最好的时代!我赞成,谁反对?

2020年.NET Core逆袭冲榜&#xff0c;多榜直接冠军&#xff01;Build2020&#xff0c;发布多款产品赋能.NET开发者&#xff01;截止5月&#xff0c;腾讯&#xff0c;阿里&#xff0c;特斯拉等大厂都在招聘.NET&#xff01;这些征兆&#xff0c;都预示着.NET的春天即将到来&…

如何给Blazor.Server加个API鉴权?

&#xff08;Ant Design of Blazor为努力而生&#xff09;书接上文&#xff0c;上次我们说到了最终选用Blazor.Server来实现了我们的MVP项目&#xff0c;额其实就是博客的增删改查&#xff0c;不过运行还是很爽的&#xff0c;不过是一个小demo&#xff0c;脑子里一直有个声音&a…

结构型模式——桥接模式

一、 实验目的与要求 1.练习使用桥接模式。设计相关的模拟场景并进行实施&#xff0c;验证模式特性&#xff0c;掌握其优缺点。 2.实验结束后&#xff0c;对相关内容进行总结。 二、实验内容 1.模式应用场景说明 相信大家都看过罗老师买奶茶的情节&#xff0c;现实生活中也是一…

TypeScript+vue使用与迁移经验总结

源宝导读&#xff1a;ERP平台的前端底层使用了Vue作为组件的基础架构&#xff0c;而使用了TypeScript语言进行组件的封装与开发。本文将简要介绍平台在使用TypeScript和Vue框架进行老功能重构时的经验总结。一、背景下面主要探讨是以下三个方面&#xff1a;目前项目中使用到的v…

结构型模式——适配器模式

一、 实验目的与要求 1.练习使用适配器模式。设计相关的模拟场景并进行实施&#xff0c;验证模式特性&#xff0c;掌握其优缺点。 2.实验结束后&#xff0c;对相关内容进行总结。 二、实验内容 1.模式应用场景说明 现在喜欢上网的年轻人越来越多&#xff0c;而家里面的电脑满足…

[号外] Blazor wasm 其实也挺快!

之前第一篇的时候&#xff0c;因为没有用任意配置&#xff0c;导致wasm加载很慢&#xff0c;我就感觉不会是这样的&#xff0c;为了不误导小盆友&#xff0c;所以还是趁着周末研究了一波&#xff0c;做了相关的调整&#xff0c;经过测试&#xff0c;速度基本可观了&#xff0c;…