ei1903の競プロメモ

競プロの解説など

HOJ 1237 - Swap Game

問題URL

問題概要

三面サイコロと3つのカッ​プがある。
サイコロの各面には1,2,3の整数が書かれており、サイコロを振ったとき1が書かれた面が上になる確率は$ \ A \ $、2は$ \ B \ $、3は$ \ C \ $である。

はじめ$ \ P \ $番目のカ​ップにのみボールが入っており、サイコロを$ \ K \ $回振り以下の操作を行う。操作が全て終わった後に$ \ R \ $番目のカ​ップにボールが入っている確率を求めよ。

  • 1が書かれた面が上ならばカ​ップ1とカ​ップ2の中身を入れ替える
  • 2が書かれた面が上ならばカ​ップ2とカッ​プ3の中身を入れ替える
  • 3が書かれた面が上ならばカッ​プ1とカッ​プ3の中身を入れ替える

制約

  • $0 \leq K \leq 10^5$
  • $1 \leq P,R \leq 3$
  • $0 \leq A,B,C \leq 1$
  • $A + B + C = 1$

解説

動的計画法で答えを求めます。
$i \ $回目の操作でボールが$ \ j \ $番目のカッ​プに入っている確率を$ \ dp[i][j] \ $とします。
$ dp[i][j] \ $は「$ \ j \ $番目のカッ​プからボールが移動しない確率 + 他のカッ​プからボールが移動してくる確率」で求められるので、

  • $dp[i][1] = dp[1][i - 1] \times B + dp[2][i - 1] \times A + dp[3][i - 1] \times C$
  • $dp[i][2] = dp[1][i - 1] \times A + dp[2][i - 1] \times C + dp[3][i - 1] \times B$
  • $dp[i][3] = dp[1][i - 1] \times C + dp[2][i - 1] \times B + dp[3][i - 1] \times A$

というように求められます。
これを$ \ dp[1] \ $から順番に求め、$dp[K][R] \ $を出力すればよいです。