1. paizaラーニングトップ
  2. レベルアップ問題集
  3. ゲーム・確率DPメニュー(言語選択)
  4. 問題一覧 D(Beta)編
  5. (問題 10) サイコロ step.final D(Beta)編

ゲーム・確率DPメニューのサムネイル
(問題 10) サイコロ step.final D(Beta)編(paizaランク A 相当)

問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!

問題

下記の問題をプログラミングしてみよう!

今度は 2 回までではなく、M 回まで振れることを考えてみましょう。

M - 1 回まで振れる場合の期待値がすでに計算できていると仮定します。このとき期待値は (1 回目で C が出たときの最終的なスコアの期待値) × 1/N を C = C_1, C_2, ..., C_N のときの総和をとったものになります。これは、問題 9 と同様、C が M - 1 回まで振れる場合の期待値より大きいか否かで期待値を最大化する戦略を決めることができ、それをもとに計算が出来ます。

1 回だけ振れる場合の期待値は簡単に求めることが出来ます。それをもとに、2 回だけ振れる場合の期待値をもとめ、またそれをもとに、3 回だけ振れる場合の期待値を求め…というように繰り返し計算することで M 回まで振れる場合の期待値も計算することが出来ます。

問題

各面の出る確率が等しい N 面のダイスがあり、このダイスを最大で M 回まで振ることができます。

最終的な出目が i (1 ≦ i ≦ N) のとき、スコアは C_i になります。スコアの期待値を最大化するような戦略を取ったときの期待値を求めてください。

入力される値

入力は以下のフォーマットで与えられます。


N M
C_1
C_2
...
C_N


1 行目には 2 つの整数 N,M が与えられます
i + 1 (1 ≦ i ≦ N) 行目には 1 つの整数 C_i が与えられます。
入力は合計で 1 + N 行からなり、入力値最終行の末尾に改行が 1 つ入ります。


入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。 標準入力からの値取得方法はこちらをご確認ください
期待する出力

期待値を 1 行で出力してください。

相対誤差もしくは絶対誤差が 10 ^ -4 以下のとき正解と判定されます。

条件

すべてのテストケースにおいて、以下の条件をみたします。


  • 2 ≦ N ≦ 100

  • 1 ≦ M ≦ 100

  • 0 ≦ C_i ≦ 100000 (1 ≦ i ≦ N)

入力例1

6 2
1
2
3
4
5
6

出力例1

4.25000000000000000000

入力例2

7 100
7
7
7
7
7
7
7

出力例2

7.0000000000

問題一覧へ戻る

ページの先頭へ戻る