問題概要
問題ページ
-
D - increment of coins
問題ページへ移動する
問題文
袋の中に金貨が \(A\) 枚、銀貨が \(B\) 枚、銅貨が \(C\) 枚入っています。
袋の中にあるいずれかの種類の硬貨が \(100\) 枚になるまで以下の操作を繰り返します。
操作:袋の中から硬貨をランダムに \(1\) 枚取り出す。(どの硬貨も等確率で選ばれる。) 取り出した硬貨と同じ種類の硬貨を \(2\) 枚袋に戻す。
操作回数の期待値を求めてください。
制約
- \(0 \leq A,B,C \leq 99\)
- \(A+B+C \geq 1\)
問題の考察
ACコード
import sys
def solve():
input = sys.stdin.readline
mod = 10 ** 9 + 7
a, b, c = list(map(int, input().rstrip('\n').split()))
dp = [[[0] * 101 for _ in range(101)] for _ in range(101)]
for i in range(99, a - 1, -1):
for j in range(99, b - 1, -1):
for k in range(99, c - 1, -1):
dp[i][j][k] += (dp[i + 1][j][k] + 1) * i / (i + j + k)
dp[i][j][k] += (dp[i][j + 1][k] + 1) * j / (i + j + k)
dp[i][j][k] += (dp[i][j][k + 1] + 1) * k / (i + j + k)
print(dp[a][b][c])
if __name__ == '__main__':
solve()