链接:https://www.nowcoder.com/acm/contest/180/B
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
Special Judge, 64bit IO Format: %lld
空间限制:C/C++ 262144K,其他语言524288K
Special Judge, 64bit IO Format: %lld
题目描述
小a有
个烟花,每个烟花代表着互不相同的颜色,对于第
个烟花,它有
的概率点燃,现在小a要去点燃它们,他想知道产生颜色的期望个数 及 产生恰好产生
种颜色的概率
![](https://i-blog.csdnimg.cn/blog_migrate/ee197491a243ba3b0afda06a862c1f73.png)
![](https://i-blog.csdnimg.cn/blog_migrate/75dbb6f4f5495685607e0d3661d23918.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8da8a2762629ddcb0d686344e25b0fba.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f4fdfb28964ad7bca25f71f78273c2eb.png)
输入描述:
第一行两个整数
![](https://i-blog.csdnimg.cn/blog_migrate/9dc198bd9dde1e024155f18420de9fad.png)
接下来一行
![](https://i-blog.csdnimg.cn/blog_migrate/ee197491a243ba3b0afda06a862c1f73.png)
个数,第
![](https://i-blog.csdnimg.cn/blog_migrate/75dbb6f4f5495685607e0d3661d23918.png)
个数
![](https://i-blog.csdnimg.cn/blog_migrate/8da8a2762629ddcb0d686344e25b0fba.png)
表示第
![](https://i-blog.csdnimg.cn/blog_migrate/75dbb6f4f5495685607e0d3661d23918.png)
个烟花被点燃的概率
输出描述:
输出有两行
第一行表示产生不同颜色的期望个数
第二行表示产生恰好
种颜色的概率
![](https://i-blog.csdnimg.cn/blog_migrate/f4fdfb28964ad7bca25f71f78273c2eb.png)
以换行符分割
备注:
对于
![](https://i-blog.csdnimg.cn/blog_migrate/8a032531e5b492dc89ff59ea40212c80.png)
的数据:
![](https://i-blog.csdnimg.cn/blog_migrate/cd0a42659ea74e66353b468603bb8a4f.png)
对于
![](https://i-blog.csdnimg.cn/blog_migrate/4a453a57d0aa0d24e3d3a2b67bab05d8.png)
的数据:
![](https://i-blog.csdnimg.cn/blog_migrate/fdf4de790272e2605c65cf1ca82eae90.png)
输出均保留4位小数,若你的答案误差与std不超过
![](https://i-blog.csdnimg.cn/blog_migrate/b5ea932a623c1a693d4e50e427c23544.png)
分析:第一问由期望的定义可知期望为E=∑p
i ;
第二问,简单概率DP,令dp[i][j]为前i个烟花恰有j个被点燃,
那么dp[i][j]=dp[i-1][j-1] * p
i + dp[i-1][j] * (1-p
i),其中dp[i-1][j-1] * p
i 为第i个被点燃的概率,
dp[i-1][j] * (1-p
i)为第i个不被点燃的概率,最后初始化一下即可。
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; double p[100100]; double dp[100100][300]; int main() { int n,k; scanf("%d%d",&n,&k); double E=0; for(int i=1;i<=n;i++) { scanf("%lf",&p[i]); E+=p[i]; } dp[0][0]=1; for(int i=1;i<=n;i++) dp[i][0]=(1-p[i])*dp[i-1][0];//初始化 for(int i=1;i<=n;i++) for(int j=1;j<=k;j++) dp[i][j]=dp[i-1][j-1]*p[i]+(1-p[i])*dp[i-1][j]; printf("%.4lf\n%.4lf\n",E,dp[n][k]); return 0; }