BBQ Hard dp + 组合数学 + 建模
傳送門
文章目錄
- 題意:
- 思路:
題意:
有nnn組物品,每組有aia_iai?個肉和bib_ibi?個菜,你可以選擇兩組物品讓后將肉和菜其串在一根串上,問有多少種不同的串法。
兩種方法不同當且僅當選的物品不同或者串的順序存在至少一個位置一個方法串的肉,另一個串的菜。
n≤2e5,ai,bi≤2e3n\le2e5,a_i,b_i\le2e3n≤2e5,ai?,bi?≤2e3
思路:
一個比較巧妙的建模題。
考慮暴力做法,顯然答案為∑i=1n∑j=i+1n(ai+bi+aj+bjai+aj)\sum_{i=1}^{n}\sum_{j=i+1}^n\binom{a_i+b_i+a_j+b_j}{a_i+a_j}∑i=1n?∑j=i+1n?(ai?+aj?ai?+bi?+aj?+bj??),但是這個是n2n^2n2的,而且基本沒什么能優(yōu)化的地方。
看到ai,bia_i,b_iai?,bi?很小,可以考慮從這里入手。
枚舉aaa?也是行不通的。。
還是觀察一下式子吧,將其抽象一下,考慮到平面兩個點(x1,y1),(x2,y2)(x_1,y_1),(x_2,y_2)(x1?,y1?),(x2?,y2?),從第一個點到第二個點的路徑方案數(shù)為(x2?x1+y2?y1x2?x1)\binom{x_2-x_1+y_2-y_1}{x_2-x_1}(x2??x1?x2??x1?+y2??y1??)。
嗯?!這兩個式子是不是像極了!
我們只需要將其中一個(ai,bi)(a_i,b_i)(ai?,bi?)變成負數(shù)就行了!
所以我們要求的東西變成什么了?
不就是從∑j=i+1npath((?aj,?bj),(ai,bi))\sum_{j=i+1}^npath((-a_j,-b_j),(a_i,b_i))∑j=i+1n?path((?aj?,?bj?),(ai?,bi?))的方案數(shù)嘛。
這個好算啊,直接轉(zhuǎn)換成二維平面的dpdpdp,讓后f[i][j]=f[i?1][j]+f[i][j?1]f[i][j]=f[i-1][j]+f[i][j-1]f[i][j]=f[i?1][j]+f[i][j?1]
但是你會發(fā)現(xiàn)一個問題,這個是求的∑j=1npath((?aj,?bj),(ai,bi))\sum_{j=1}^npath((-a_j,-b_j),(a_i,b_i))∑j=1n?path((?aj?,?bj?),(ai?,bi?)),但是你要求∑j=i+1npath((?aj,?bj),(ai,bi))\sum_{j=i+1}^npath((-a_j,-b_j),(a_i,b_i))∑j=i+1n?path((?aj?,?bj?),(ai?,bi?)),顯然我們簡單容斥一下,將原來的式子∑i=1n∑j=i+1n(ai+bi+aj+bjai+aj)=(∑i=1n∑j=1n(ai+bi+aj+bjai+aj)?∑i=1n(2?(ai+bi)2?ai))2\sum_{i=1}^{n}\sum_{j=i+1}^n\binom{a_i+b_i+a_j+b_j}{a_i+a_j}=\frac{(\sum_{i=1}^n\sum_{j=1}^n\binom{a_i+b_i+a_j+b_j}{a_i+a_j}-\sum_{i=1}^n\binom{2*(a_i+b_i)}{2*a_i})}{2}∑i=1n?∑j=i+1n?(ai?+aj?ai?+bi?+aj?+bj??)=2(∑i=1n?∑j=1n?(ai?+aj?ai?+bi?+aj?+bj??)?∑i=1n?(2?ai?2?(ai?+bi?)?))?
這樣問題就解決啦。
總結(jié)
以上是生活随笔為你收集整理的BBQ Hard dp + 组合数学 + 建模的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 芥菜疙瘩怎么腌 方法非常简单
- 下一篇: 梦见别人流血是什么预兆 你是哪一种情况