题目:
有一些不规则的硬币。在这些硬币中,prob[i] 表示第 i 枚硬币正面朝上的概率。
请对每一枚硬币抛掷 一次,然后返回正面朝上的硬币数等于 target 的概率。
示例 1:
输入:prob = [0.4], target = 1
输出:0.40000
思路:
动态规划题
类似梯子题,通过梯子可以到达任意的高的楼,题号忘了
一个状态是硬币数量,另一个是当前正面朝上的数量
初始化好正面朝上为 0 情况下的数据
再从硬币数量 1 开始计算概率和,得到最终结果
class Solution {
public double probabilityOfHeads(double[] prob, int target) {
int len = prob.length;
double[][] dp = new double[len+1][target+1];
for(int i=0;i<=len;i++){
dp[i][0] = i==0?1:dp[i-1][0]*(1-prob[i-1]);
}
for(int i=1;i<=len;i++){
for(int j=1;j<=target;j++){
dp[i][j] = dp[i-1][j]*(1-prob[i-1])+dp[i-1][j-1]*prob[i-1];
}
}
return dp[len][target];
}
}