DTOJ 4705. 遞增

題意

已知 l1nl_{1\dots n}r1nr_{1\dots n},求所有滿足以下條件的序列 {an}\{a_n\} 的元素和的和:對任意 i[1,n]i\in[1,n] 滿足 liairil_i\le a_i\le r_i​​,且 {an}\{a_n\} 是非嚴格遞增的。

子任務一 (3030pts),2n6,0liri<102\le n\le 6, 0\le l_i\le r_i< 10.

子任務二 (3030pts),2n50,0liri<502\le n\le 50, 0\le l_i\le r_i<50.

子任務三 (4040pts),2n50,0liri<2602\le n\le 50, 0\le l_i\le r_i< 2^{60}.

題解

我是弱智啊完全不會數數,自閉了。
前面的DP還是比較顯然的:把區間離散化一下可以設f[i][j]f[i][j]爲前ii個區間取了jj個數的所有方案的和,再記一個g[i][j]g[i][j]表示方案數輔助轉移,轉移時考慮第i+1i+1個區間放幾個數,枚舉符合條件的kk,使得j+1,...,kj+1,...,k都在區間i+1i+1上,問題在於nn個數選mm個數,可重複無標號的方案數以及所有方案的和。
方案數考慮把每兩個相鄰的數的差分加11,顯然是C(n+m1,m)C(n+m-1,m)。對於所有方案的和,我考場上直接考慮每個位置每個數的貢獻,就自閉了,因爲有兩個組合數乘在一起根本化不開。
此時不應該往復雜方向走(雖然好像可以插值?然而不會),感性認知一下:既然知道方案數了,如果知道平均數就好了,看起來好像就是這mm個數的平均數?發現對於一種方案的每個aia_i,把它變成n+1ain+1-a_i,再把序列翻轉一下也是合法的,且兩個方案是彼此唯一對應的。而這兩個方案加起來是(n+1)m(n+1)*m,所以(n+1)/2(n+1)/2就是平均數了!組合數因爲mm很小可以暴算,總複雜度O(n4)O(n^{4})。(注意取模和long long的問題!)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章