結果
問題 | No.108 トリプルカードコンプ |
ユーザー |
|
提出日時 | 2023-01-01 12:25:59 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 121 ms / 5,000 ms |
コード長 | 763 bytes |
コンパイル時間 | 199 ms |
コンパイル使用メモリ | 82,192 KB |
実行使用メモリ | 85,836 KB |
最終ジャッジ日時 | 2024-11-27 00:02:35 |
合計ジャッジ時間 | 2,486 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 20 |
ソースコード
N = int(input()) A = list(map(int, input().split())) cards = [0] * (3+1) for n in range(N): cards[min(A[n], 3)] += 1 # dp[i][j][k]: # 0 枚持っているカードが i 種類 # 1 枚持っているカードが j 種類 # 2 枚持っているカードが k 種類 # のときのコンプまでの期待値 dp = [[[-1.0]*(N+1) for j in range(N+1)] for i in range(N+1)] dp[0][0][0] = 0.0 def E(i, j, k): if i < 0 or j < 0 or k < 0: return 0.0 if dp[i][j][k] != -1.0: return dp[i][j][k] dp[i][j][k] = (i * E(i-1, j+1, k) + j * E(i, j-1, k+1) + k * E(i, j, k-1) + N) / (i+j+k) return dp[i][j][k] E(cards[0], cards[1], cards[2]) print(dp[cards[0]][cards[1]][cards[2]])