3 条题解
-
0
#include<bits/stdc++.h> using namespace std; #define db double const int N=3100; db p[N],dp[N][N],ans; //dp[i][j]表示掷前i枚硬币后有j枚硬币正面朝上的概率 int main() { int n;scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%lf",&p[i]); memset(dp,0,sizeof dp);dp[0][0]=1.0; for(int i=1;i<=n;i++)dp[i][0]=dp[i-1][0]*(1.0-p[i]); for(int i=1;i<=n;i++)for(int j=1;j<=i;j++) dp[i][j]=dp[i-1][j-1]*p[i]+dp[i-1][j]*(1.0-p[i]); for(int i=n;i>=(n+1)/2;i--)ans+=dp[n][i]; printf("%.10lf",ans); return 0; } -
0
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=3005; int n; double a[maxn],f[maxn][maxn],ans; int main(){ std::ios::sync_with_stdio(false); scanf("%d",&n); for(int i=1;i<=n;++i){ scanf("%lf",&a[i]); } f[0][0]=1; for(int i=1;i<=n;++i){ f[i][0]=f[i-1][0]*(1-a[i]); for(int j=1;j<=i;++j){ f[i][j]=f[i-1][j-1]*a[i]+f[i-1][j]*(1-a[i]); } } for(int i=0;i<=n;++i){ if(i>n-i){ ans+=f[n][i]; } } printf("%.10lf",ans); return 0; } -
0
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=3005; int n; double a[maxn],f[maxn][maxn],ans; int main(){ std::ios::sync_with_stdio(False); scanf("%d",&n); for(int i=1;i<=n;++i){ scanf("%lf",&a[i]); } f[0][0]=1; for(int i=1;i<=n;++i){ f[i][0]=f[i-1][0]*(1-a[i]); for(int j=1;j<=i;++j){ f[i][j]=f[i-1][j-1]*a[i]+f[i-1][j]*(1-a[i]); } } for(int i=0;i<=n;++i){ if(i>n-i){ ans+=f[n][i]; } } printf("%.10lf",ans); return 0; }
- 1
信息
- ID
- 1585
- 时间
- 2000ms
- 内存
- 1024MiB
- 难度
- 6
- 标签
- 递交数
- 100
- 已通过
- 28
- 上传者