結果
問題 | No.463 魔法使いのすごろく🎲 |
ユーザー |
![]() |
提出日時 | 2020-05-16 18:08:22 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
AC
|
実行時間 | 527 ms / 2,000 ms |
コード長 | 825 bytes |
コンパイル時間 | 106 ms |
コンパイル使用メモリ | 12,800 KB |
実行使用メモリ | 46,840 KB |
最終ジャッジ日時 | 2024-09-22 14:26:04 |
合計ジャッジ時間 | 23,296 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 36 |
ソースコード
import sys import numpy as np read = sys.stdin.buffer.read readline = sys.stdin.buffer.readline readlines = sys.stdin.buffer.readlines # 出発時に支払うことに統一 N, M = map(int, readline().split()) C = np.array([0] + read().split() + [0], np.float64) p = 1 / M mat = np.eye(N) for n in range(N - 1): for i in range(1, M + 1): to = n + i if to > N - 1: to = 2 * (N - 1) - to mat[n, to] -= p dp_0 = np.linalg.solve(mat, C) dp_1 = np.zeros(N) for n in range(N - 1, -1, -1): # 魔法権利があるときのコスト期待値 if n + M >= N - 1: dp_1[n] = C[n] else: # 魔法を使う x = dp_0[n + 1:n + M + 1].min() # 適当にすすむ y = dp_1[n + 1:n + M + 1].mean() dp_1[n] = min(x, y) + C[n] print(dp_1[0])