C質問:hdu6693
質問の意味:非常に満足して商品を購入するためにn個の現在の確率値を与えられ、1-nから購入するように求め、全てから選択が幸せ最大確率値、それを購入しました。
私たちはで始まる何からすべての最初の問題の意味を、よく理解は、私たちはこのタイトルを考えているか、最初の明確なポイントは、あなたが1つ、2つ、または選挙、または選挙3、4を選択することができるということです。。。。第N。
大規模な例ケースが出て推論に小さくすることができ、
1:まず第一に、あなたは1を選ぶ場合は、直接その上で最大を選択?
2:あなたは2を選択した場合は、選択するのPI + PJ-2 *パイ*のPJがある+ PJ *は(1-PI)これは期待度だけ幸せです、PI <PJそこパイ*(1-PJ)を設定することを望むかもしれません2、彼は確かに大きくなることが選択されます。。。。
すなわち、PI +のPJ-2 * PI * PJ> PJ有するパイ-2 * PI * PJ> 0 GET型PI *(1-2 * PJ)> 0 0.5同様に3から選択<PJを得るために、図4に示すように、我々はまた、選択されました私のこの原則を満たすために。。。。。
3:どのように複数の単語を選択し、それを選択します。このようにして選択し、2から分かるPI <PK <PJ <0.5であり、PI×(1-PJ)+ PJ×(1-PI)=パイ+ PJ-2 * PI * PJ HAVE PKを提供することができることは明らかです+ PJ-2 * PK * PJ
(PK-PI)(1-2pj)> = + PJ-2 * PK * PJ -pi -pj + 2 * PI * PJ = PK-π-2pj(PK-PI)がPK 0選ば説明するようにできるだけ大。。。。。。。。。
4:アルゴリズムは、ソートされた最初のを得ることが明らかであろ最大値を選択し、位置の<0.5 =番号を見つける、この位置から前方に探し始める、選挙まで2から選択される三回の選挙から選択されます。完全なユニットは、することができたとき。。。。。。。。。。
5:次に、以下のコードが何であるかをすることができます保存するには、このリストの式を見てください。
1の#include <cstdioを> 2の#include <CStringの> 3の#include <アルゴリズム> 4の#include <cmath> 5の#include <ビットセット> 6の#include <iostreamの> 7のtypedef 長い 長LL。 8 使用して 名前空間はstdを、 9 CONST INT MAXN = 10200 。 10 int型T、N。 11 ダブルPI [MAXN]。 12 INT メイン(){ 13 のscanf(" %dの"、&T)。 14 しばらく(t-- ){ 15 のscanf(" %d個"、&N) 16 のために(int型 i = 1 ; iが<= N; iが++)のscanf(" %のLF "、&PI [I])。 17 ソート(PI + 1、PI + N + 1 )。 18 INTの先端= 0 。 19 のためには、(int型 i = 1 ; iがn = <; iは++ ){ 20 であれば(PI [i]が<= 0.5 ){ 21 チップ= I。 22 } 23 } 24 であれば(先端== 0)のprintf(" %.10lfする\ n " 、PI [N])。 25 他{ 26の ダブル ANS = PI [N]。 27 二重 P1 = 1.00 -pi [チップ]、P2 = PI [チップ]。 28 のためには、(int型 I =ヒント- 1 ; I> = 1 ; i-- ){ 29の ANS = MAX(ANS、PI [I] *のP1 +(1 -pi [I])* P2)。 30 P2 = PI [I] *のP1 +(1 -pi [I])* P2。 31 P1 = P1 *(1 - PI [I])。 32 } 33 のprintf(" %.10lfする\ n " 、ANS)。 34 } 35 } 36 リターン 0 。 37 }