codeforces#253 D - Andrey and Problem里的数学知识
这道题是这种,给主人公一堆事件的成功概率,他仅仅想恰好成功一件。
于是,问题来了,他要选择哪些事件去做,才干使他的想法实现的概率最大。
我的第一个想法是枚举,枚举的话我想到用dfs,但是认为太麻烦。
于是想是不是有什么规律,于是推导了一下,推了一个出来,写成代码提交之后发现是错的。
最后就没办法了,剩下的时间不够写dfs,于是就放弃了。
今天看thnkndblv的代码,代码非常短,于是就想肯定是有什么数学规律,于是看了一下,
果然如此。
是这种,还是枚举,当然是有技巧的,看我娓娓道来。
枚举的话,如果总共同拥有n件事件,
从中选择1件事情去做,实现的概率最大是多少,
选择2件事情去做,实现的概率最大是多少,以此类推到选择n件事情去做。
于是就会得到n个结果,里面最大的那个就是实现主人公想法的最大概率。
这种话要从n件事件中随意选出1件事情然后比概率,随意选出2件事情然后比概率……随意选出n件事情然后比概率
还是要搜索。
可是这里就有数学知识了,能够不用搜索,做法是这种:
将n个事件成功的概率从大到小排序,
然后,
仅仅选择前1件事去做成功的概率就是“从中选择1件事情去做,最大的实现概率”
仅仅选择前2件事去做成功的概率就是“从中选择2件事情去做,最大的实现概率”
以此类推。
有了这个,这道题就非常easy了,至于为什么这样做能够,无法证明,假设有人证明的话,欢迎留言讨论,附上原题以及地址和我后来AC的代码例如以下:
http://codeforces.com/contest/443/problem/D
2 seconds
256 megabytes
standard input
standard output
Andrey needs one more problem to conduct a programming contest. He has
n friends who are always willing to help. He can ask some of them to come up with a contest problem. Andrey knows one value for each of his fiends — the probability that this friend will come up with a problem if Andrey asks him.
Help Andrey choose people to ask. As he needs only one problem, Andrey is going to be really upset if no one comes up with a problem or if he gets more than one problem from his friends. You need to choose such a set of people that maximizes the chances
of Andrey not getting upset.
The first line contains a single integer n
(1 ≤ n ≤ 100) — the number of Andrey's friends. The second line contains
n real numbers pi
(0.0 ≤ pi ≤ 1.0) — the probability that the
i-th friend can come up with a problem. The probabilities are given with at most 6 digits after decimal point.
Print a single real number — the probability that Andrey won't get upset at the optimal choice of friends. The answer will be considered valid if it differs from the correct one by at most
10 - 9.
#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(double a,double b)
{
return a>b;
}
int main()
{
int n,i,j,k;
double a[110],x,sum,MAX;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%lf",&a[i]);
sort(a,a+n,cmp);
MAX=0;
for(i=1;i<=n;i++)
{
sum=0;
for(j=0;j<i;j++)
{
x=a[j];
for(k=0;k<i;k++)
{
if(j!=k)
x*=1-a[k];
}
sum+=x;
}
MAX=max(sum,MAX);
}
printf("%.12lf\n",MAX);
}
codeforces#253 D - Andrey and Problem里的数学知识的更多相关文章
- codeforces 442B B. Andrey and Problem(贪心)
题目链接: B. Andrey and Problem time limit per test 2 seconds memory limit per test 256 megabytes input ...
- 【codeforces 442B】 Andrey and Problem
http://codeforces.com/problemset/problem/442/B (题目链接) 题意 n个人,每个人有p[i]的概率出一道题.问如何选择其中s个人使得这些人正好只出1道题的 ...
- 【Codeforces 442B】Andrey and Problem
[链接] 我是链接,点我呀:) [题意] n个朋友 第i个朋友帮你的概率是pi 现在问你恰好有一个朋友帮你的概率最大是多少 前提是你可以选择只问其中的某些朋友不用全问. [题解] 主要思路是逆向思维, ...
- Codeforces Round #253 (Div. 1) B. Andrey and Problem
B. Andrey and Problem time limit per test 2 seconds memory limit per test 256 megabytes input standa ...
- Codeforces 442B Andrey and Problem(贪婪)
题目链接:Codeforces 442B Andrey and Problem 题目大意:Andrey有一个问题,想要朋友们为自己出一道题,如今他有n个朋友.每一个朋友想出题目的概率为pi,可是他能够 ...
- cf442B Andrey and Problem
B. Andrey and Problem time limit per test 2 seconds memory limit per test 256 megabytes input standa ...
- Andrey and Problem
B. Andrey and Problem time limit per test 2 seconds memory limit per test 256 megabytes input standa ...
- QDUoj GZS的三角形 棋盘里的数学 思维+杨辉三角
1. 题目 我的提交 GZS的三角形 发布时间: 2015年9月6日 15:18 最后更新: 2016年6月26日 12:10 时间限制: 1000ms 内存限制: 256M 描述 机智无 ...
- Codeforces Round #253 (Div. 2) D. Andrey and Problem
关于证明可以参考题解http://codeforces.com/blog/entry/12739 就是将概率从大到小排序然后,然后从大到小计算概率 #include <iostream> ...
随机推荐
- python for else
http://blog.sina.com.cn/s/blog_5357c0af01013mwn.html raw_input() 与 input() __ Python http://www.cnbl ...
- 首款符合PICO-ITX规格的A20开源硬件开发平台
http://mp.weixin.qq.com/mp/appmsg/show?__biz=MjM5NzM0MjcyMQ==&appmsgid=10001083&itemidx=2&am ...
- 浅谈数据库技术,磁盘冗余阵列,IP分配,ECC内存,ADO,DAO,JDBC
整理-----数据库技术,磁盘冗余阵列,IP分配, ECC内存,ADO, DAO,JDBC 1.MySQL MySQL是最受欢迎的开源SQL数据库管理系统,它由 MySQL AB开发.发布和支持.My ...
- Servlet过滤器——日志记录过滤器
1.概述 在实际的项目开发过程中,经常需要在项目运行时,记录并在控制台中输出运行时的日志信息,便于查看项目的运行状况.本实例将介绍如何应用过滤器实现日志记录.运行本实例,将在控制台中输出项目运行时的日 ...
- 基础知识(10)- 部署应用程序和applet
10.1 JAR文件 10.1.1 清单文件 10.1.2 可运行JAR文件 10.1.3 资源 10.1.4 密封 10.2 Java Web Start 10.2.1 沙箱 10.2. ...
- Q10Ⅱ 双核 - 产品中心 - 海美迪
海美迪Q系列视频文明书 Q10Ⅱ 双核 - 产品中心 - 海美迪
- ADS1.2安装
一.ADS1.2的安装 1. 解压 2. 双击打开ads1.2 3.我们选择当中的SETUP.EXE文件,进行安装 4.点击Next: 5.这是许可文件,假设允许的话选择Yes: 6.选择安装文件夹, ...
- mysql 创建函数 error Code: 1227. Access denied;
mysql> show function status; +------+------------------+----------+------------+----------------- ...
- grep、sed、awk、perl、js、vim等对正则表达式的支持的差别
grep.sed.awk.perl等对正则表达式的支持的差别 grep 2.5.1 egrep 2.5.1 sed 3.02 sed 4.07 awk 3.1.1 perl 5.8.0 vim 6.1 ...
- java开发异常类型汇总
1. java.lang.nullpointerexception 这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对 ...