硬币投掷实验c语言程序设计,投掷硬币(动态规划)

浅浅的花香味﹌ 2022-10-14 13:49 258阅读 0赞

#1506 : 投掷硬币

时间限制:

10000ms

单点时限:

1000ms

内存限制:

256MB

描述

小Hi有一枚神奇的硬币。已知第i次投掷这枚硬币时,正面向上的概率是Pi。

现在小Hi想知道如果总共投掷N次,其中恰好M次正面向上的概率是多少。

输入

第一行包含两个整数N和M。

第二行包含N个实数P1, P2, … PN。

对于30%的数据,1 <= N <= 20

对于100%的数据,1 <= N <= 1000, 0 <= M <= N, 0 <= Pi <= 1

输出

输出一行一个实数表示恰好M次正面向上的概率。注意行末需要包含一个换行符’\n’。

输出与标准答案误差在0.001以内都被视为正确。

样例输入

2 1

0.5 0.5

样例输出

0.500000

AC code:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define MAXN 1000010

#define EPS 1e-9

using namespace std;

double pi[1010],dp[1001][1001];

int n,m;

int main()

{

//freopen(“D:\\in.txt”,”r”,stdin);

int i,j;

while(scanf(“%d%d”,&n,&m)!=EOF)

{

for(i=1;i<=n;i++)

{

scanf(“%lf”,&pi[i]);

}

memset(dp,0,sizeof(dp));

dp[1][1]=pi[1];

dp[1][0]=1-pi[1];

for(i=2;i<=n;i++)

{

dp[i][0]=dp[i-1][0]*(1-pi[i]);

}

for(i=2;i<=n;i++)

{

for(j=1;j<=i;j++)

{

dp[i][j]=dp[i-1][j]*(1-pi[i])+dp[i-1][j-1]*pi[i];

}

}

printf(“%lf\n”,dp[n][m]);

}

return 0;

}

发表评论

表情:
评论列表 (有 0 条评论,258人围观)

还没有评论,来说两句吧...

相关阅读

    相关 c语言硬币

    将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法? 将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法? 输入

    相关 动态规划硬币

    > 题目:几年教师节活动中,公司里为培训讲师提供了不同面值的饮料兑换券(每种面值数量不限),培训讲师可以领取兑换券去食堂兑换鲜榨果汁,要求兑换券和果汁必须等价,姜小虎想要兑换一

    相关 动态规划硬币问题

    凑硬币问题 假设有 1 元,3 元,5 元的硬币若干(无限),现在需要凑出 11 元,问如何组合才能使硬币的数量最少? 用数组d来存储当前每个面值可以对应的合成的最小