LG P3978 [TJOI2015]確率

問題の意味の説明

IQを向上させるためには、ZJYは、1日の確率論を学び始めた彼女は質問を考えた:のためにランダムに生成された\(N \)バイナリーツリー根付いノード(互いに異なる構成のすべての他の形態の確率が表示されます)、 ?それはノード数の期待値がどのくらいあるの葉
次のように擬似コードの構造を有する2つのツリーがあるかどうかを決定します。

(\ \テキスト{CHECK}(T1、T2):\)
\(// \テキスト{两棵树的节点} T1、T2 \)
\(\ mathbf {もし} \ T1 = \ mathbf {NULL} \ \ mathbf {または} \ T2 = \ mathbf {NULL}:\)
\(\クワッド\ mathbf {リターン} \ T1 = \ mathbf {NULL} \ \ mathbf {と} \ T2 = \ mathbf {NULL} \)
\( \ {他} mathbf:\)
\(\ mathbf {リターン} \ \テキスト{CHECK}(T1.leftson、T2.leftson)\ \ mathbf {と} \ \テキスト{CHECK}(T1.rightson、T2.rightson )\)

分析

まず、作る\(f_n \)を表し\(N \) バイナリポイントの数\(G_N \)を表し\を(N \)全ての点\(f_n \)バイナリツリーのリーフノードの総数でツリーを。

もちろん、最初のステップは、検索や手計算ができ、書き込み〜表バーストの友人を再生するために法律を見つけることです。

n個 1 2 3 4 5 ...
\(f_n \) 1 2 5 14 42 ...
\(G_N \) 1 2 6 20 70 ...

:我々は、パターンが見出さ\(G_N \) = \(1-N-nf_を{} \)

実際には、このルールを証明するために、超シンプル:

  • それらのそれぞれのために\(N \)バイナリーツリーポイント、そこにあれば(K \)\リーフノードは、私たちが置かれた後、\(k個\)の葉の削除を取得します\(K \)の木をn個(\ -1 \)バイナリポイント。
  • それらの各\(N-1 \)バイナリポイントが正確\(N- \)それらの各ように位置が、新しい葉を掛けてもよい(N-1 \)\バイナリ点が得られた\(N- \)回。
  • 要約すると、我々は結論することができる:すべての\(N \)バイナリツリーポイントの葉の数に等しい\(N-1 \)バイナリポイントの数\(\ n回\)を

私たちはちょうど必要\(F \)することができる。\(F \)漸化式は、ノードの左の部分木の数で列挙することができる:
\ [F_n = \ sum_ 1} ^ {I = { N-1} f_if_ {NI-
1} \] の境界である\(= F_1 1 \) それは視力カタロニア語の外であるべき列の数は、(実際に参照されている\(1,2,5,14,421,2,5を14、42 \)を知っている必要があります)

その後、答えは
[\ FRAC {G_N} {\
f_nを} = \ FRAC {nf_ {N-1}} {f_n} \] 代数式Rukatelan一般的な用語の
\ [f_n = FRAC {\ \ binom {2N} {N}} {N + 1
\]} に等しい上記の式を得ることが容易である
{\ [\ FRAC N(N + 1)} {2(2N-1)}。\]

コード

double n;

int main()
{
    scanf("%lf",&n);
    printf("%.12lf\n",n*(n+1)/(2*(2*n-1)));
}

おすすめ

転載: www.cnblogs.com/Anverking/p/solution-lgp3978.html