題意
已知 l1…n 和 r1…n,求所有滿足以下條件的序列 {an} 的元素和的和:對任意 i∈[1,n] 滿足 li≤ai≤ri,且 {an} 是非嚴格遞增的。
子任務一 (30pts),2≤n≤6,0≤li≤ri<10.
子任務二 (30pts),2≤n≤50,0≤li≤ri<50.
子任務三 (40pts),2≤n≤50,0≤li≤ri<260.
題解
我是弱智啊完全不會數數,自閉了。
前面的DP
還是比較顯然的:把區間離散化一下可以設f[i][j]爲前i個區間取了j個數的所有方案的和,再記一個g[i][j]表示方案數輔助轉移,轉移時考慮第i+1個區間放幾個數,枚舉符合條件的k,使得j+1,...,k都在區間i+1上,問題在於n個數選m個數,可重複無標號的方案數以及所有方案的和。
方案數考慮把每兩個相鄰的數的差分加1,顯然是C(n+m−1,m)。對於所有方案的和,我考場上直接考慮每個位置每個數的貢獻,就自閉了,因爲有兩個組合數乘在一起根本化不開。
此時不應該往復雜方向走(雖然好像可以插值?然而不會),感性認知一下:既然知道方案數了,如果知道平均數就好了,看起來好像就是這m個數的平均數?發現對於一種方案的每個ai,把它變成n+1−ai,再把序列翻轉一下也是合法的,且兩個方案是彼此唯一對應的。而這兩個方案加起來是(n+1)∗m,所以(n+1)/2就是平均數了!組合數因爲m很小可以暴算,總複雜度O(n4)。(注意取模和long long
的問題!)