hiho一下第264周《投掷硬币》题目分析

1
1

《投掷硬币》题目分析

本题是一道比较简单的概率DP。

我们可以用f[i][j]表示投掷i枚硬币,其中j面向上的概率。那么有:

f[i][j] = f[i-1][j] * (1 - Pi) + f[i-1][j-1] * Pi

按照以上递推式计算出f[N][M]的值即可。

3 answer(s)

0

咋回事,过不了,网上找到所有这题的都过不了

0

define PI 0.5

double calcProbability(unsigned int m, unsigned int n) { double probability = 0;

if (m < n || 0 == m) return 0;

if ( 1 == m && 0==n) return PI;

if (1 == m && 1 ==n) return PI;

return calcProbability(m-1, n)*(1-PI) + calcProbability(m-1, n-1)*PI;

}

2

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int N = sc.nextInt();
    int M = sc.nextInt();

    float[] p = new float[N+1];


    float[][] dp = new float[N+1][N+1];
    dp[0][0] = 1;
    for (int i = 1; i <= N; i++) {
        p[i] = sc.nextFloat();
        dp[i][i] = p[i] * dp[i - 1][i - 1];
        dp[i][0] = (1 - p[i]) * dp[i - 1][0];
    }

    for (int i = 1; i <= N; i++) {

        int temp = i > M ? M : i;
        int j = 1;
        while (j <= temp) {
            if(j<i) {
                dp[i][j] = p[i] * dp[i - 1][j] + (1 - p[i]) * dp[i - 1][j - 1];
            }
            j++;
        }
    }

    System.out.println(String.format("%.6f",dp[N][M]));
}

} 不知道哪里错了。。求大佬点拨一下。。

write answer 切换为英文 切换为中文


转发分享