HDU ACM 8.13 T2 的 O(m)做法
阿新 • • 發佈:2021-08-13
前言
由於本人比較拉所以看起來很囉嗦,將就看就好。
題目大意
\(n\)種包,每個包裡面有一大一小兩個球,選小球的代價是\(1\),大球的代價是\(2\),可以都不選,若一次性買兩個包,則可以優惠\(1\)元。設總代價為\(k\),求對於\(k\in[1,m]\),選的方案數。
解題思路
設二元生成函式\([z^nt^k]\)表示選\(n\)種包,代價為\(k\)的方案數。
根據題意,答案為
嘗試裂項化為\(\sum\frac1{1-az}\)形式,以便消去一個元\([z^n]\)。我們提出分母,將其因式分解,設:
不難得到\(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} \]不如先化掉分子吧
設
\[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)\)遞推做了,此題就做完了。