朱世傑恆等式的應用-以CF841C爲例

題目大意

Codeforces 841C Leha and Function.php

\(F(n,k)\)爲在集合\(\{x|x \in [1,n]\}\)中選擇一個大小爲k的子集,最小元素的指望值。算法

給定數組\(a_i,b_i\),知足\(\forall_{i,j}a_i \geqslant b_j\).求出\(a_i\)的一個排列\(a'_i\),使得\(\sum_{i} F(a_i,b_i)\)最大。數組

朱世傑恆等式

在這裏介紹一個很是有用的關於組合數求和的公式——朱世傑恆等式(i.e. Hockey-stick identity):
\[ \sum_{i=m}^{n}\dbinom{i}{k} = \dbinom{n+1}{k+1} - \dbinom {m}{k+1} \]
\(m=k\)時:
\[ \sum_{i=m}^n \dbinom{i}{m} = \dbinom {n+1}{m+1} \]
不失通常性,對於特殊狀況做出證實,容易推廣到第一個式子。ide

證實

\(n\)施用數學概括法。spa

\(n=m\)時, 顯然成立.排序

對於\(n-1 \geqslant m\), 假設對於\(n-1\)成立, 那麼:ip

\(\sum_{i=m}^{n-1} \dbinom im = \dbinom {n}{m+1}\).get

\(\sum_{i=m}^n \dbinom im = \dbinom{n}{m+1} + \dbinom {n}{m} = \dbinom {n+1}{m+1}\)數學

Q.E.D.it

其餘證實方法見維基百科

關於F(n,k)的推演

在比賽中, 我首先獲得了\(F(n,k)\)的遞推式:

\[F(n,k) = \frac kn F(n-1, k-1) + (1-\frac kn) F(n-1, k)\].

咱們可使用強數學概括法證實:

\[F(n,k) = \frac {n+1}{k+1}\].

不過, 有一個更爲簡單的方法:

顯然,

\[F(n,k) = \frac {1}{\dbinom{n}{k}}\sum_{i=1}^n i \dbinom{n-i}{k-1} \]

而:

\[\sum_{i=1}^n i\dbinom{n-i}{k-1} = \sum_{i=1}^{n-k+1}\sum_{j=1}^{n-k+1}\dbinom{n-j}{k-1}\\=\sum_{i=1}^{n-k+1}\sum_{j=k-1}^{n-i}\dbinom{j}{k-1} \\=\sum_{i=1}^{n-k+1} \dbinom{n-i+1}{k}\\=\sum_{i=k}^{n}\dbinom{i}{k} = \dbinom{n+1}{k+1}\]

因而:

\(F(n,k) = \frac{\dbinom{n+1}{k+1}}{\dbinom{n}{k}} = \frac {n+1}{k+1}\).

Q.E.D.

關於貪心的證實

那麼問題就變成了:

給定數組\(a_i, b_i\),

\[\max \sum_{i=1}^n \frac{a_i+1}{b_i + 1}\].

咱們證實, 給較大的\(a_i\)應搭配較小的\(b_i\).

對於\(0 \leqslant a_1 \leqslant a_2, 0 \leqslant b_1 \leqslant b_2\), 咱們證實

\(a_1b_1 + a_2b_2 \leqslant a_1b_2 + a_2b_1\).

咱們能夠作差證實上面的式子.

那麼咱們可使用證實貪心的經常使用方法,交換法(i.e. 冒泡排序法)來證實貪心的correctness.

算法

通過上面的推演,咱們終於獲得了這個問題的標算:

把b數組從小到大排序,a數組從大到小排序,一一對應便可.

然而,在比賽中,樣例卻直接給除了解法,使人遺憾.

比賽的時候推了好久,雖然早就知道貪心作法.

參考文獻

1. AoPC中關於組合數性質的闡述

2. AoPC中IOI 1981,第二題的題解

3. 維基百科中的資料

相關文章
相關標籤/搜索