【題解】CF1628D2 Game on Sum (Hard Version)
題目傳送門
思路
這是一道DP題。
所以我們來設狀態,我們讓 \(dp_{i,j}\) 表示在第 i 次操作後, Bob 選擇“加”了 j 次,那麼顯然最後的答案是 \(dp_{n,m}\)
再來看轉移:
\(dp_{i,j}\) 的 i 一定由 i-1 轉移而來,而 j 則取決於 Bob 加不加,所以可以貢獻給它的狀態是 \(dp_{i-1,j}\) 和 \(dp_{i-1,j-1}\) 。
反過來說, \(dp_{i,j}\) 可以給 \(dp_{i+1,j}\) 和 \(dp_{i+1,j+1}\) 作出貢獻。
先考慮轉移。
顯然,Alice 作出決策後, Bob 會在 \(dp_{i-1,j}-t\)
所以,Alice顯然要讓它們相等,否則Alice就會虧一波。
也就是,她會讓 \(t=\frac{dp_{i-1,j}\ \ \ +\ dp_{i-1,j-1}}{2}\),因為只有這樣才可以保證 \(dp_{i-1,j}-t\) 與 \(dp_{i-1,j-1}+t\) 相等。
邊界為 \(dp_{i,0}=0\)(一次都不加,Alice當然全選 0 )和 \(dp_{i,i}=ik\) (全加,Alice當然要拉滿)。
看起來,接下來是一個 \(\Theta(nm)\) 的 dp。
不過,我們發現,它的轉移很像一個楊輝三角!
所以,我們考慮 \(dp_{i,i}\)
而 \(dp_{i,j}\) 只能給 \(dp_{i+1,j}\) 和 \(dp_{i+1,j+1}\) 作出貢獻。
所以,它需要連續將 i 進行一些 +1 ,並選擇一些來把 j 也來加夠。
然而,如果直接分析, \(dp_{i,i}\) 會給 \(dp_{i+1,i+1}\) 貢獻,然而這裡已經填好了,所以會掛。
注意到 \(dp_{i,j}\) 不能貢獻給 \(dp_{i,j+1}\) ,我們考慮從 \(dp_{i+1,i}\) 開始計算答案。
這時,向 n 需要加 \(n-i-1\) ,向 m 需要加 \(m-i\)
而在這個過程中,它顯然會被不斷除2,一共會除 \(n-i\) 次,因為我們直接從 \(dp_{i+1,i}\) 開始轉移就意味著已經進行了一次操作。
顯然如果 m 超過規定範圍 Bob 就虧了,所以考慮用 m 來限制列舉變數。
最後的答案,就是 \(\sum\limits^m_{i=1}\tfrac{ik\ \cdot\ \tbinom{n-i-1}{m-i}}{2^{n-1}}\) 。
當然,如果 \(n=m\) ,前面也說過, \(dp_{i,i}\) 不應當再給它作貢獻,此時的答案是 \(km\) ,應當特判。
預處理 \(2^i\) 的逆元,複雜度 \(\Theta(n)\) 。