leetcode-12周双周赛-5090-抛掷硬币

题目描述:

 

 二维dp:

class Solution:
    def probabilityOfHeads(self, prob: List[float], target: int) -> float:
        dp = [[0 for _ in range(target+1)] for _ in range(len(prob)+1)]
        dp[0][0] = 1.0
        for i in range(1,len(prob)+1):
            for j in range(target+1)[::-1]:
                dp[i][j] = dp[i-1][j] * (1- prob[i-1])
                if j > 0:
                    dp[i][j] += dp[i-1][j-1] * prob[i-1]
        return dp[-1][-1]
            

一维dp:

class Solution:
    def probabilityOfHeads(self, prob: List[float], target: int) -> float:
        dp = [1] + [0] * target
        for p in prob:
            for i in range(target+1)[::-1]:
                dp[i] = dp[i] * (1- p)
                if i > 0:
                    dp[i] += dp[i-1] * p
        return dp[-1]

 

posted @ 2019-10-21 13:16  oldby  阅读(260)  评论(0编辑  收藏  举报