EDPC J - Sushi

寿司

考え方

ABCでいうと、E問題級。

期待値の計算に慣れていれば、発想自体はそこまで難しくない。

次のようにおく。

すると、次の式になる。

$$
E = 1 + p_3E_3 + p_2E_2 + p_1E_1 + p_0E
$$

最後の「$0$ 個の皿から $1$ つ取った(何も起こらない)後の期待値」は、求めたい期待値と同じものである。
自分を含めた再帰計算はできないので、これを以下のように変形する。

$$
(1-p_0)E = 1 + p_3E_3 + p_2E_2 + p_1E_1
$$

できるだけ小数計算をしたくないので、両辺に全皿枚数を掛ける。

ここで、$c_i$ を寿司が $i$ 個ある皿の枚数とすると、次のようになる。

$$
(n-c_0)E = n + c_3E_3 + c_2E_2 + c_1E_1
$$

最初の括弧の中は $1$ 個以上の皿の枚数である。
したがって、全部 $0$ 個の場合を例外処理で取り除いておけば、割り算が可能で、遷移の式が求まる。

$$
E = \dfrac{n + c_3E_3 + c_2E_2 + c_1E_1}{c_3 + c_2 + c_1}
$$

あとは、これで動的計画法するだけではあるのだが、表が三次元なうえに表の幅が一定でないので注意。
サイズを大きめに取るという解決策もあるが、練習としてはピッタリサイズで作りたいところである。

計算量は $O(N^3)$。

入力例3での動作

入力を受け取る。

n: 2
a: {1, 2}

寿司が $1$ 個ある皿は $1$ 枚である。
寿司が $2$ 個ある皿も $1$ 枚である。
寿司が $3$ 個ある皿はない。

以下では、状態を皿の枚数の組で表す。
順番は、寿司が $3$ 個、$2$ 個、$1$ 個ある皿とする。

例えば $(0,1,1)$ を考える。
寿司が $2$ 個ある皿が $1$ 枚ある。
寿司が $1$ 個ある皿も $1$ 枚ある。

全部食べ終わった状態 $(0,0,0)$ の期待操作回数は $0$ である。

状態 $(0,0,1)$ を考える。
寿司がある皿は $1$ 枚、空の皿も $1$ 枚である。
考え方で求めた式に代入すると、期待値は $(2+1\times0)/1=2$ となる。

状態 $(0,0,2)$ を考える。
$2$ 枚とも寿司が $1$ 個ある皿である。
どちらを選んでも、次は $(0,0,1)$ になる。
したがって、期待値は $(2+2\times2)/2=3$ となる。

状態 $(0,1,0)$ を考える。
寿司が $2$ 個ある皿が $1$ 枚ある。
それを選ぶと、次は $(0,0,1)$ になる。
空の皿を選ぶ場合は状態が変わらない。
考え方で求めた式に代入すると、期待値は $(2+1\times2)/1=4$ となる。

最後に、初期状態 $(0,1,1)$ を考える。
寿司が $1$ 個ある皿を選ぶと、次は $(0,1,0)$ になる。
残りの期待値は $4$ である。

寿司が $2$ 個ある皿を選ぶと、次は $(0,0,2)$ になる。
残りの期待値は $3$ である。

この状態では空の皿がない。
したがって、期待値は $\frac{2+1\times4+1\times3}{2}=4.5$ となる。

よって、答えは $4.5$。

注意点

寿司が $1$ つ減った時の参照先に注意。

寿司が $3$ 個乗っている皿が選ばれたときに、参照する先は「$3$ 個の皿が $1$ つ減ったデータ」ではない。
$3$ 個の皿から寿司を $1$ つ食べるということは、$2$ 個の皿が新しくできるということ。
つまり、参照先は「$3$ 個の皿が $1$ つ減り、$2$ 個の皿が $1$ つ増えたデータ」である。

寿司が $2$ 個乗っている皿が選ばれたときも同様。

その影響で、$2$ 個の皿や $1$ 個の皿の枚数が初期値より増える可能性がある。
DP テーブルの広さにも注意が必要。

別解

特になし。