有一系列的樓房,高度從1~n,然後從左側看能看到f個樓房,右側看能看到b個樓房,問有多少個方案數滿足。
首先我們知道乙個結論:n的環排列的個數與n-1個元素的排列的個數相等,因為p(n,n)/n=(n-1)!。
可以肯定,無論從最左邊還是從最右邊看,最高的那個樓一定是可以看到的.
假設最高的樓的位置固定,最高樓的編號為n,那麼我們為了滿足條件,可以在樓n的左邊分x-1組,右邊分y-1組,
且用每組最高的那個元素代表這一組,那麼樓n的左邊,從左到右,組與組之間最高的元素一定是單調遞增的,
且每組中的最高元素一定排在該組的最左邊,每組中的其它元素可以任意排列(相當於這個組中所有元素的環排列)。右邊反之亦然。
然後,可以這樣考慮這個問題,最高的那個樓左邊一定有x-1個組,右邊一定有y-1個組,且每組是乙個環排列,
這就引出了第一類stirling數(
我們可以先把n-1個元素分成x-1+y-1組,然後每組內部做環排列。再在所有組中選取x-1組放到樓n的左邊。所以答案是
ans(n, f, b) = c[f + b - 2][f - 1] * s[n - 1][f + b - 2];
31ll stir[maxn][maxn];
32ll c[maxn][maxn];
3334
void
init() 43}
4445
intmain()
55return0;
56 }
hdu 4372 第一類斯特林數
include include include include include include include include include include using namespace std define inf 0x2fffffff define ll long long define m...
HDU 3625 第一類斯特林數
第一類斯特林數 n 個人坐在 r個圓桌的方案數 hdu2625 他要最多破 k 個門,即形成最多 k 個迴圈,不能單獨乙個形成迴圈,這樣不合法,自己房間的鑰匙放在自己的房間裡面。第一類斯特林數 n個球放成r個非空迴圈 includeusing namespace std const int maxn...
CF960G 第一類斯特林數
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 為最大值添的位...