CF960G 第一類斯特林數

2022-05-20 19:51:09 字數 853 閱讀 7940

cf960g

設\(f(i,j)\)為\(i\)個數的序列,有\(j\)個字首最大值的方案數

我們考慮每次添乙個最小數,則有:\(f(i,j)=f(i-1,j)+(i-1)*f(i-1,j-1)\),顯然這是第一類斯特林數

從而我們得到乙個樸素的答案:$$ans=\sum\limits_f_×f_×c_i$$

理解:列舉\(i+1\)為最大值添的位置,則已限制了字首最值個數及字尾最值個數,然後再乘上前半部分所填的數

觀察\(f_×f_\),發現第一維和唯一:$$ans=\beginn-1\a+b-2\endc_^$$

可能會有點難理解:等同於分類成\(a+b-2\)個環,而環是不考慮順序的,所以我們選擇不考慮打亂順序地選擇環

至此,我們唯一需要的就是快速求出第一類斯特林數\(\beginn-1\\a+b-2\end\)

即使是單個數也無法有特殊的公式快速得出,所以我們用與求整行第一類斯特林數的方法求出

\(o(nlog^2n)\)的方法已經爛大街了,分治一下就行

\(o(nlogn)\):由於涉及到公式推倒,不是本題解的重點

移步**斯特林數與斯特林反演,內有詳細證明推倒及**

#includetypedef int ll;

const ll mod=998244353,g=3,_g=332748118,maxn=2e5+9;

inline ll pow(ll base,ll b)return ret;

}ll r[maxn],w[maxn];

inline ll fir(ll n)

ll n,a,b,m;

ll ans[maxn];

int main()

HDOJ 4372 第一類斯特林數

有一系列的樓房,高度從1 n,然後從左側看能看到f個樓房,右側看能看到b個樓房,問有多少個方案數滿足。首先我們知道乙個結論 n的環排列的個數與n 1個元素的排列的個數相等,因為p n,n n n 1 可以肯定,無論從最左邊還是從最右邊看,最高的那個樓一定是可以看到的.假設最高的樓的位置固定,最高樓的...

HDU 3625 第一類斯特林數

第一類斯特林數 n 個人坐在 r個圓桌的方案數 hdu2625 他要最多破 k 個門,即形成最多 k 個迴圈,不能單獨乙個形成迴圈,這樣不合法,自己房間的鑰匙放在自己的房間裡面。第一類斯特林數 n個球放成r個非空迴圈 includeusing namespace std const int maxn...

hdu 4372 第一類斯特林數

include include include include include include include include include include using namespace std define inf 0x2fffffff define ll long long define m...