有nn
個數依次進入最多容納m
m的棧,求出棧的不同排列數。
如果沒有m
m就是卡特蘭數了。設f[
i][j
]f[i
][j]
表示已經有i
i個數字進入過棧,期中有j
j個還在棧裡的方案數。
下一步可以彈出棧頂或將下乙個數入棧。所以方程就是f[
i][j
]=f[
i][j
+1]+
f[i−
1][j
−1]f
[i][
j]=f
[i][
j+1]
+f[i
−1][
j−1]
最終答案就是f[n
][0]
f[n]
[0]了。
時間複雜度o(n
m)o(
nm)
#include
#include
using
namespace std;
const
int n=
2010
,mod=
4096
;int ans,n,m,f[n]
[n];
intmain()
printf
("%d"
,f[n][0
]);return0;
}
SSLOJ 1318 地鐵重組
傳送門 有兩個車站和乙個中轉站,求在經過一系列的玄妙操作後有幾種不同的出站順序 設f i,jf fi,j 為在第乙個車站中還有i ii節車廂,在中轉站還有j jj節車廂 對於f i,jf fi,j 則有兩種狀態可以轉移過來 1.fi j fi,j 1 1.f f 1.fi,j f i,j 1 2.f...
biubiubiu坐地鐵 期望dp
biubiubiu 每次出去玩都要去坐地鐵,biubiubiu 觀察到,當地鐵上人比較少的時候,大家都會選擇那些與其他人不相鄰的座位,現在地鐵上有 n 個座位排成一排,1 號座位與 2 號相鄰,n 號座位與 n 1 號相鄰,除了 1 號與 n 號座位,任意 i 號座位都與 i 1 和 i 1 號座位...
多重組合數 計數類DP
題目 有n種物品,第i種物品有p i 個,不同種類的物品可以相互區分,同種類的物品不能相互區分。從這些物品種取出m個,有多少種取法,答案對mod取模。思想 dp i j 表示前i種物品,一共拿了j個物品的方案數。為了得到dp i j 那麼可以從前i 1種物品取j k個,再從第i種物品取k個即可 下面...