经过分析后的二分

题目是

Josnch星球是一个赌博之风盛行的星球。每个人一出生就有一定数额的钱,之后的所有收入只能由赌博获得(OMG,如果RP不好,输光了所有的 钱。。。)假设赌博公司的某场赌博有N个结果,每个结果能获得的赔率比分别是a[1],a[2]...a[N]。假设现在XXX有X块钱,问他选择怎样的 策略才能使得最坏情况下回报最大(假设N个结果中只有一个是有回报的,X块钱必须全部用在这次赌博上,赔率比就是a[i],假设你在第 i 个结果中投入 了 y 块钱,那么你的回报是 y * a[i],所谓策略是你在每个结果上的投入应该是怎么分配,比如样例N = 2的时候,赔率比分别是1,2,你有1000块钱,那么买 第一个2000 /3,, 后一个1000 / 3,这样最坏情况下你的回报是666.67)

不妨假设最坏情况下回报为mid,假设在每个结果上的投入分别是x[1],x[2]...x[n],那么则有min(x[1] * a[1], x[2] * a[2] .. x[n] * a[n]) >= mid, 即对于任意的 i ,有x[i] * a[i] >= mid,所以x[1] >= mid / a[1] x[2] >= mid / a[2] ... x[n] >= mid / a[n]。因为X = x[1] + x[2] + .. x[n] 那么如果mid / a[1] + ... mid / a[n] <= X,说明最坏情况下至少可以取得的回报为mid(每个投入为x[1]...x[n]即可,剩余的钱随便乱搞)。否则说明总钱数不能满足这样情况。因此,如 果mid满足条件,即mid / a[1] + ... + mid / a[n] = mid * (1 / a[1] + .. 1 / a[n]) <= X,对于任意P <= mid的数,必然满足P * (1 / a[1] + .. 1 / a[n]) <= X 如果mid不满足条件,那么mid * (1 / a[1] + .. 1 / a[n]) > X,对于任何大于mid的数Q,Q * (1 / a[1] + ... 1 / a[n]) > mid * (1 / a[1] + .. 1 / a[n]) > X。 所以mid具有单调性,因此二分mid即可。

上面是大神的解释

感觉是 二分能取到的最小值

#include <iostream>
#include<cstdio>
#include<string.h>
using namespace std;
double A[];
int main()
{
int n;
while(scanf("%d",&n)==){
for(int i=;i<n;++i)
scanf("%lf",&A[i]);
double X;
scanf("%lf",&X);
double L=,R=X*100.0,mid ,ans;
double eps=1e-;
while(L+eps<=R){
mid=(L+R)/;
double sum=;
for(int i=;i<n;++i)
sum+=mid/A[i];
if(sum<=X){
ans=mid;
L=mid+eps;
}
else {
R=mid-eps;
}
}
printf("%.2lf\n",ans);
}
return ;
}

ac1066的更多相关文章

随机推荐

  1. 应用Strong Name保存.NET应用程序集

    关于Strong Name的主题,网上已经有很多这方面的介绍,你可能最熟悉的印象就是这样 大部分的情况,这样就可以了.如果代码是机密的,还可能用到Delay sign only,这就复杂一些,请查找相 ...

  2. iOS教程:Core Data数据持久性存储基础教程

    目录[-] 创建Core Data工程 创建数据模型 测试我们的数据模型 来看看SQL语句的真面目 自动生成的模型文件 创建一个表视图 之后看些什么? 就像我一直说的,Core Data是iOS编程, ...

  3. 转sklearn保存模型

    训练好了一个Model 以后总需要保存和再次预测, 所以保存和读取我们的sklearn model也是同样重要的一步. 比如,我们根据房源样本数据训练了一下房价模型,当用户输入自己的房子后,我们就需要 ...

  4. python代码实现stack和queue

    栈stack 后进先出 class Stack(object): def __init__(self): self.stack = [] def push(self, value): # 进栈 sel ...

  5. zoj 2676 Network Wars 0-1分数规划+最小割

    题目详解出自 论文 Amber-最小割模型在信息学竞赛中的应用 题目大意: 给出一个带权无向图 G = (V,E), 每条边 e属于E都有一个权值We,求一个割边集C,使得该割边集的平均边权最小,即最 ...

  6. 微信 获取wx.config 参数 基类

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  7. Linux:file命令显示自定义文件类型

    file 命令可以查看文件类型信息,原理见: 非常Linux-file命令与magic file 修改 /ect/magic 文件后,可用 file 命令显示自定义文件类型信息. man magic ...

  8. 分治法及其python实现例子

    在前面的排序算法学习中,归并排序和快速排序就是用的分治法,分治法作为三大算法之一的,有非常多的应用例子. 分治法概念 将一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题-- ...

  9. Python:正则表达式概念

    #正则表达式内容非常多,网上的学习资源也是目不暇接,我从中筛选学习并且整理出以下 的学习笔记 一.正则表达式匹配过程: 1.依次拿出表达式和文本中的字符比较 2.如果每一个字符都能匹配,则匹配成功:一 ...

  10. PHPExcel exception: “Could not close zip file … ”报错

    Q: PHPExcel exception: “Could not close zip file … ” A:目录没有写权限,chmod 对$phpExcel->save($dir)中报错路径设 ...