什么郩啦
干
我真的很挫折
一二三四五
; ;
def new21Game(self, n: int, k: int, maxPts: int) -> float:
dp = [0.0 for _ in range(n+1)]
# O(N^2)
# dp[0] = 1.0
# p = 1/maxPts
# for i in range(0, k):
# for pts in range(1, maxPts+1):
# dp[i+pts] += (dp[i]*p)
# return sum(dp[k:n+1])
# O(N)
dp[0] = 1.0 #init
window_sum = 1.0 if k>0 else 0.0 # = dp[i-1]+...+dp[i-maxPts] when
[i-maxPts,i-1] in [0,k], which is valid probability
for i in range(1,n+1):
dp[i] = window_sum/maxPts
if i<k:
window_sum += dp[i]
if 0<=(i-maxPts)<k:
window_sum -= dp[i-maxPts]
return sum(dp[k:])