1. 程式人生 > 其它 >HDU ACM 8.13 T2 的 O(m)做法

HDU ACM 8.13 T2 的 O(m)做法

前言

由於本人比較拉所以看起來很囉嗦,將就看就好。

題目大意

\(n\)種包,每個包裡面有一大一小兩個球,選小球的代價是\(1\),大球的代價是\(2\),可以都不選,若一次性買兩個包,則可以優惠\(1\)元。設總代價為\(k\),求對於\(k\in[1,m]\),選的方案數。

解題思路

設二元生成函式\([z^nt^k]\)表示選\(n\)種包,代價為\(k\)的方案數。
根據題意,答案為

\[[z^nt^k]\frac1{1-[z(1+t+t^2)+z^2(t+2t^2+t^3)]} \]

嘗試裂項化為\(\sum\frac1{1-az}\)形式,以便消去一個元\([z^n]\)。我們提出分母,將其因式分解,設:

\[1-z(1+t+t^2)-z^2(t+2t^2+t^3)=(1-az)(1-bz) \]

不難得到\(a=(1+t)^2,b=-t\),根據

\[\frac1{(1-az)(1-bz)}=\frac 1 {a-b}(\frac{a}{1-az}-\frac{b}{1-bz}) \]

裂項得到原式等於

\[[z^nt^k]\frac1{1+3t+t^2}[\frac{(1+t)^2}{1-(1+t)^2z}+\frac t {1 + tz}] \]

大家都知道\([z^n]\frac1{1-az}=a^n\),所以可以愉快地扔掉\([z^n]\)了,化為

\[[t^k]\frac{(1+t)^{2n+2}+(-1)^nt^{n+1}}{1+3t+t^2} \]

不如先化掉分子吧

\[[t^k]\frac{\binom {2n+2}{k}+(-1)^n[k=n+1]}{1+3t+t^2} \]

\[F(t)=[t^k]\binom {2n+2}{k}+(-1)^n[k=n+1] \]

則所求變為

\[G(t)=[t^k]\frac{F(t)}{1+3t+t^2} \]

得到

\[(1+3t+t^2)F(t)=G(t) \]

拆開

\[G(t)=F(t)+3tF(t)+t^2F(t) \]

\[g(k)=f(k)+3f(k-1)+f(k-2) \]

於是可以\(O(m)\)遞推做了,此題就做完了。