關於形如\(f_{i,j} = \sum_{t=1}^{|w|}\sum_{k=1}^{|v|}f_{i+w_t,j+v_k}\),其中\(w_t,v_k\)爲一個定值的\(dp\)轉移。
能夠考慮放到座標上,畫出其轉移路線,而後考慮組合意義。spa
求\(\sum_{i,j} \binom{a_i+b_i+a_j+b_j}{a_i+a_j}\),其中\(a,b\leq 4000,n\leq 10^6\)。排序
\(\binom{a_i+b_i+a_j+b_j}{a_i+a_j}\)等價於從\((-a_i,-b_i)\)走到\((a_j,b_j)\)的方案數。
建圖後直接從左下往右上暴力\(dp\)出解。io
定義一個\(n\)的排列合法,當且僅當:設\(n\)的位置爲\(x\),有:
\[p_1<p_2<p_3....<p_{x-1}<p_x>p_{x+1}>....>p_{n-1}>p_n\]
有\(m\)個限制\((pos,v)\),形如\(p_{pos} = v\),
數據範圍:\(m\leq n\leq 10^5\),求合法排列數。class
考慮從小往大放,設\(f_{i,j}\)表示放完\(1,2...i\),左側放了\(j\)個。
轉移方程:\(f_{i,j} =f_{i-1,j-1} +f_{i-1,j}\)。
初始在\((0,0)\)每次放一個至關於移動\((+1,0)\)或\((+1,+1)\)。
限制至關於限制\(f_{v,j}\)必須經過特定方向到達該點。
而每一列最多就兩個特殊點,直接對特殊點進行\(dp\),最後一列特殊處理一下便可。統計
[JLOI2015]騙我呢數據
考慮突變的位置,設\(f_{i,j}\)表示作到第\(i\)行,該行突變位置爲\(j\)。
有:\(f_{i,j} = f_{i,j-1} +f_{i-1,j+1}\),其中\(f_{i,0} = f_{i-1,0}\)。
畫出轉移路線,把轉移路線拽直能夠發現,問題轉化爲:
從\((0,0)\)出發,到達\((n+m,n)\),且不通過\(y=x+2\)和\(y=x-(m+1)\)的方案數u。
容斥計算。移動
[NOI2018]冒泡排序di
設\(f_{i,j}\)表示還剩下\(i\)個要放,前面的最大值爲\(j\)的方案數。
顯然當前點要麼放比\(j\)大的數,要麼放還沒放的數中最下的那個。
因爲咱們是逆推因此:\(f_{i,j} = f_{i-1,j} + \sum_{k=j+1}^{n} f_{i-1,k} = \sum_{k=j}^n f_{i-1,k}\)。
考慮統計答案,枚舉在哪一個點\(i\)開始處於自由態。
因爲不會放\(a_i\),而\(a_i\leq max_{pre}\),因此必定只能放比\(max_{pre}\)大的數。
此時的方案數爲\(\sum_{k=max_{pre}+1}^n f_{n-i,k} = f_{n-i+1,max_{pre}+1}\)。
惟一的問題變爲如何快速處理\(f\)。
顯然合法的\(f_{i,j}\)須要知足\(j\ge n-i\),畫出轉移路線圖,問題轉化爲:
從\((0,n)\)出發,不通過\(y=-x+(n-1)\)到達\((i,j)\)的方案數。
這是經典問題,答案爲 \(\binom{i+n-j}{i} - \binom{i+n-j}{i+1}\)。display