codeforeces443B
- 题意
给定n个人,每个人出题的概率为 p i p_{i} pi,问只有一个人出题的最大概率。
- 思路
本题主要就是贪心+概率,概率的公式也很简单 E = ( 1 − p i ) ∗ p i + 1 + ( 1 − p i + 1 ) ∗ p i E = (1 - p_{i}) * p_{i+1} + (1 - p_{i+1}) * p_{i} E=(1−pi)∗pi+1+(1−pi+1)∗pi,然后我们用贪心思想先从可能性最大的人开始,然后开个变量记录最大值,同时不断更新 p i p_{i} pi和 p i + 1 p_{i+1} pi+1就可以了
- 代码
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N = 110;
double a[N];
int n;
int main() {
cin >> n;
for(int i = 0;i < n;i++) {
cin >> a[i];
}
sort(a,a + n,greater<double>());
double temp = a[0],t1 = 1.0 - a[0];
double maxn = a[0];
for(int i = 1;i < n;i++) {
double t = a[i] * t1 + (1 - a[i]) * temp;
maxn = max(t,maxn);
t1 *= 1.0 - a[i];
temp = t;
}
printf("%.9lf\n", maxn);
return 0;
}