Edit

【pythonでABC184を解説】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()

プログラミング

-Edit
-