タイトル説明
六十1には、この休日を祝うために、多くの企業が楽しいゲームの多くを開始しました。トントンは推測ゲームボールを見て、同じゴルフボールがi-カラーボールの既知の確率は、箱の中にビジネスから、ボールの色以外のnが出ているAIの箱に来ます。この方法トントンボックスにボールの色を決定するために、以下を使用することができます:商人作ら投機:「色はX、Y、ボールやボールの色であるかを...........あなたは確実にボールを百パーセントの箱を決定するまで」、企業は、あなたの推測が正しいか間違っている推測の少ない数を答える、トントンは、より良い贈り物を得ることができます。トントンが幸せ六から一を持っていた作るか、または番号を推測するために、出力の期待値を決定するためにボールの色を推測するためにできるだけ所有者に提示し、最適な戦略を、見つけるためにあなたを招待します。
戦略「最適」とは:推測の最小期待数を。あなたはボールの種類の色を決定するために、ボックスの確認100パーセントある場合、あなたは推測して続行する必要はありません。例えば、ボールの2色がある場合は、ボール第二の色の箱を入れて、あなたが推測できる「ボールの最初の色です。」あなたが推測するための追加の時間を必要とせずに結末を推測することができますので、企業があなたに「間違った」と教えてくれるので、あなたが推測することができ、かつ必ず100パーセント「ボールのボックスは第二の色です」。この問い合わせは、回数(あなたが推測していない1に関係なく)を推測する方法です。
戦略「最適」とは:推測の最小期待数を。あなたはボールの種類の色を決定するために、ボックスの確認100パーセントある場合、あなたは推測して続行する必要はありません。例えば、ボールの2色がある場合は、ボール第二の色の箱を入れて、あなたが推測できる「ボールの最初の色です。」あなたが推測するための追加の時間を必要とせずに結末を推測することができますので、企業があなたに「間違った」と教えてくれるので、あなたが推測することができ、かつ必ず100パーセント「ボールのボックスは第二の色です」。この問い合わせは、回数(あなたが推測していない1に関係なく)を推測する方法です。
エントリー
最初の入力行nは、nは色のボールを表してあります。N <= 2 000
第入力行N非負小数A1〜、カラーボールi番目の確率を表し、保証まで加えます。
第入力行N非負小数A1〜、カラーボールi番目の確率を表し、保証まで加えます。
輸出
最小所望の出力は、7小数点以下の桁数を予約します。
サンプル入力
3
0.5000000000 0.2500000000 0.2500000000
サンプル出力
1.5000000
プロンプト
最適な戦略の下で:、答えは「ノー」であるならば、あなたはそれが最初のカラーボールを知っている「ないゴルフボール又は第二の色のボールでは第三の色である」初めて確認して下さいお問い合わせの終わり、答えは「はい」そして二度目に頼まれている場合は、「第二の色のボールではありません。」
公式ソリューション:
いずれかの時点での質問と回答は、あなたがオブジェクトボールが含まれている球のコレクションの半分を決定することができるので、残りの半分は、ターゲットボールが含まれていません。ボールのコレクションは、ターゲットだけボールが含まれている、それは百パーセントを確認することができます含まれているまで、次にボールコレクションの更なる分裂は、オブジェクトボールが含まれています。これは、溶液への道の各リーフに決定木(バイナリ形式)、二分決定木のルートノードをもたらし中間場合であり、それは深さ問い合わせ番号ことは明らかです。あり:期待=のΣ(対応する深さ*は、それの確率がボックスに表示されたまま)=Σ(各ケース番号*の発生確率お願いします)。そして、我々は知っている:コード長が符号化方式のいくつかの種類を期待する(奥行き*確率要素が表示されます)この式のΣ同じ式です。すなわち、所望の最小符号長倍の最小の所望の数を確認して下さい。この問題を解決するには、古典的な方法である - ハフマン
私たちは、その後、確率はプライオリティキューにゼロボールではないことに注意する必要があります。
1の#include <cstdioを> 2の#include <キュー> 3 使用して 名前空間STDを、 4 int型のmain() 5 { 6 INT N。 7 一方(〜のscanf(" %d個"、&N)) 8 { 9 PRIORITY_QUEUE < 二重、ベクトル< ダブル >、大きな< ダブル >> Q。 10 ダブル X、Y、ANS = 0.0 。 11 一方(N-- ) 12 { 13 scanf関数(" %のLF "、&x)は、 14 であれば(x> 0.0 ) 15 q.push(X)。 16 } 17 ながら(q.size()> 1 ) 18 { 19 、X = q.top()。 20 q.pop()。 21 、Y = q.top()。 22 q.pop()。 23の ANS + = X + Y。 24 q.push(X + Y)。 25 } 26 のprintf(".7lf%\ n " 、年); 27 } 28 リターン 0 ; 29 }