2019 杭电多校 10 1003

题目链接:HDU 6693

比赛链接:2019 Multi-University Training Contest 10

Problem Description

Oipotato loves his girlfriend very much. Since Valentine's Day is coming, he decides to buy some presents for her.

There are \(n\) presents in the shop, and Oipotato can choose to buy some of them. We know that his girlfriend will possibly feel extremely happy if she receives a present. Therefore, if Oipotato gives \(k\) presents to his girlfriend, she has \(k\) chances to feel extremely happy. However, Oipotato doesn't want his girlfriend to feel extremely happy too many times for the gifts.

Formally, for each present \(i\), it has a possibility of \(P_i\) to make Oipotato's girlfriend feel extremely happy. Please help Oipotato decide what to buy and maximize the possibility that his girlfriend feels extremely happy for exactly one time.

Input

There are multiple test cases. The first line of the input contains an integer \(T (1\le T\le 100)\), indicating the number of test cases. For each test case:

The first line contains an integer \(n (1\le n\le 10 000)\), indicating the number of possible presents.

The second line contains \(n\) decimals \(P_i (0\le Pi\le 1)\) with exactly six digits after the decimal point, indicating the possibility that Oipotato's girlfriend feels extremely happy when receiving present \(i\).

It is guaranteed that the sum of \(n\) in all test cases does not exceed \(450000\).

Output

For each test case output one line, indicating the answer. Your answer will be considered correct if and only if the absolute error of your answer is less than \(10^{−6}\).

Sample Input

2
3
0.100000 0.200000 0.900000
3
0.100000 0.300000 0.800000

Sample Output

0.900000000000
0.800000000000

Solution

题意

有 \(n\) 种礼物,第 \(i\) 种礼物能让女朋友开心的概率为 \(P_i\),挑一些礼物,问让女朋友开心一次的概率最大为多少。

题解

概率 贪心

如果有概率大于等于 \(0.5\) 的礼物,输出其中最大的。

否则,对概率从大到小。暴力枚举选择前 \(k\) 大的礼物的的概率,求最大值即可。

此题有原题。见 CodeForces 442B

相关证明见官方题解:Codeforces #253 editorial

Code

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const double eps = 1e-8;
const int inf = 0x3f3f3f3f;
const int maxn = 100000 + 5; double p[maxn]; int main() {
int T;
scanf("%d", &T);
while(T--) {
int n;
scanf("%d", &n);
double ans = 0, maxa = -1;
int flag = 0;
for(int i = 0; i < n; ++i) {
scanf("%lf", &p[i]);
if(p[i] >= 0.5) {
flag = 1;
if(maxa = -1) maxa = p[i];
else maxa = max(maxa, p[i]);
}
}
if(flag) {
printf("%.6lf\n", maxa);
} else {
sort(p, p + n);
double tmp1 = p[n - 1];
double tmp2 = p[n - 1] * (1 - p[n - 2]) + p[n - 2] * (1 - p[n - 1]);
ans = tmp2;
int k = 3;
while(tmp1 < tmp2 && k <= n) {
ans = tmp2;
tmp1 = tmp2;
tmp2 = 0;
for(int i = n - 1; i >= n - k; --i) {
double tmp = 1;
for(int j = n - 1; j >= n - k; --j) {
if(j == i) {
tmp *= p[j];
} else {
tmp *= 1 - p[j];
}
}
tmp2 += tmp;
}
k ++;
}
printf("%.6lf\n", max(ans, tmp2));
}
}
return 0;
}

HDU 6693 Valentine's Day (概率)的更多相关文章

  1. HDU 3853:LOOPS(概率DP)

    http://acm.split.hdu.edu.cn/showproblem.php?pid=3853 LOOPS Problem Description   Akemi Homura is a M ...

  2. HDU 3076 ssworld VS DDD 概率dp,无穷级数,oj错误题目 难度:2

    http://acm.hdu.edu.cn/showproblem.php?pid=3076 不可思议的题目,总之血量越少胜率越高,所以读取时把两人的血量交换一下 明显每一轮的胜率和负率都是固定的,所 ...

  3. HDU 5781 ATM Mechine (概率DP)

    ATM Mechine 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5781 Description Alice is going to take ...

  4. hdu 4762 Cut the Cake概率公式

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4762 题目大意:一个圆形蛋糕,现在要分成M个相同的扇形,有n个草莓,求n个草莓都在同一个扇形上的概率. ...

  5. HDU 5985 Lucky Coins(概率)

    http://acm.split.hdu.edu.cn/showproblem.php?pid=5985 题意:有多种类型的硬币,每种类型的硬币都有一定的数量,现在每次抛硬币,除去朝下的硬币,知道最后 ...

  6. hdu 6305 RMQ Similar Sequence——概率方面的思路+笛卡尔树

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=6305 看题解,得知: 0~1内随机取实数,取到两个相同的数的概率是0,所以认为 b 序列是一个排列. 两个 ...

  7. HDU 4050 wolf5x(动态规划-概率DP)

    wolf5x Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  8. HDU 4865 Peter's Hobby --概率DP

    题意:第i天的天气会一定概率地影响第i+1天的天气,也会一定概率地影响这一天的湿度.概率在表中给出.给出n天的湿度,推测概率最大的这n天的天气. 分析:这是引自机器学习中隐马尔科夫模型的入门模型,其实 ...

  9. HDU 4035:Maze(概率DP)

    http://acm.split.hdu.edu.cn/showproblem.php?pid=4035 Maze Special Judge Problem Description   When w ...

随机推荐

  1. Gson extend 思路

    package org.rx.core.internal; import com.google.gson.*; import net.sf.cglib.proxy.Enhancer; import n ...

  2. MacBook Pro 快捷键2

    Mac 键盘快捷键 您可以按下组合键来实现通常需要鼠标.触控板或其他输入设备才能完成的操作.   要使用键盘快捷键,请按住一个或多个修饰键,同时按快捷键的最后一个键.例如,要使用快捷键 Command ...

  3. 怎么知道dll文件是哪个net版本

    有时候经常需要查看.dll所使用的.net版本, 因为根本不知道它是使用了1.1还是2.0, 或者是3.0, 这个时候如果需要打开vs.net那又太麻烦, 所以经过长久的摸索, 我找到了一个比较简便的 ...

  4. linux SMbus错误

    针对piix4_smbus ****host smbus controller not enabled的解决方法 查看文件并用超级权限修改内容 在末尾加入blacklist i2c——piix4 重启 ...

  5. 神奇,教你用随机数打印hello world

    下面是一段随机数程序. public static void main(String[] args) { System.out.println(randomString(-229985452) + & ...

  6. html-body标签中相关标签 02

    今日主要内容: 列表标签 <ul>.<ol>.<dl> 表格标签 <table> 表单标签 <fom> 一.列表标签 列表标签分为三种. 1 ...

  7. linux 下安装chrome的rpm包

    1. 下载chrome的rpm包,假设叫cho. 2.执行命令 rpm -ivh cho 3.报错提示需要lsb>=4.0,执行命令 yum install lsb 等待安装完毕. 4. 重新执 ...

  8. bzoj4550 小奇的博弈

    我看出了是个 Nimk 问题.... dp我明白意思,我也会推组合数.... 但是...神tm统计答案啊...蒟蒻不会~

  9. android中的Serveice组件

    创建 配置 Service: 1.定义一个继承了Service类的子类 2.在 AndroidManifest.xml清单文件中对开发的Service进行配置 Service和Activity很相似, ...

  10. 求背景图片左边到#box盒子左边框外侧的距离

    box{ width: 100px; height: 200px; background: pink; padding: 100px; border: 80px solid; background-i ...