今天集訓問錯排是什麼被hszx教練嘲諷了,痛下決心學一下竟然還挺簡單的
錯位排序遞推公式:
設f[i]為i個數錯位排序 (任意1<=i<=n a[i]!=i)
f[0]=1,f[1]=0;
f[i]=(f[i-1]*f[i-2])*(i-1) (i>=2)
公式理解:
情況1:插入第i個元素時,前i-1個已經錯位排好,則選擇其中任意乙個與第i個互換一定滿足要求,選擇方法共i-1種,前i-1位錯排f[i-1]種,記f[i-1]*(i-1)
情況2:插入第i個元素時,前i-1個中恰有乙個元素a[j]使得a[j]=j,其他i-2個錯位排好,則將i與j交換,j在i-2位中的插入共i-1種,前i-2位錯排f[i-2]種,記f[i-2]*(i-1)
以上兩種情況求和可得
f[i]=(f[i-1]*f[i-2])*(i-1) (i>=2)
遞推**
long long cp[maxn];
inline void get_cp()
模板題:bzoj4517
附**(寫慢了,不預處理階乘逆元能降乙個log qaq)
#include#include#include#includeusing namespace std;
#define maxn 1000005
#define mod 1000000007
int n=maxn,m,t;
long long stair[maxn];
long long invs[maxn];
long long cp[maxn];
long long ans[maxn];
inline long long qpow(long long b,long long t)
return ans;
}inline long long inv(long long x)
inline void init()
cp[0]=1ll;
for(int i=2;i<=n;i++)
cp[i]=(i-1)*(cp[i-2]+cp[i-1])%mod;
}inline long long comb(int a,int b)
int main()
}
全錯位排序公式推導
全錯位排列被著名數學家尤拉 leonhard euler,1707 1783 稱為 組合數論的乙個妙題 的 裝錯信封問題 的兩個特例。裝錯信封問題 是由當時最有名的數學家約翰 伯努利 johann bernoulli,1667 1748 的兒子丹尼爾 伯努利 danidbernoulli,1700 ...
組合數學 全錯位排序公式
problem description 大家常常感慨,要做好一件事情真的不容易,確實,失敗比成功容易多了!做好 一件 事情尚且不易,若想永遠成功而總從不失敗,那更是難上加難了,就像花錢總是比掙錢容易的道理一樣。話雖這樣說,我還是要告訴大家,要想失敗到一定程度也是不容易的。比如,我高中的時候,就有乙個...
錯位排列遞推公式推導
全錯位排列 即被著名數學家尤拉 leonhard euler,1707 1783 稱為組合數論的乙個妙題的 裝錯信封問題 裝錯信封問題 是由當時最有名的數學家約翰 伯努利 johann bernoulli,1667 1748 的兒子丹尼爾 伯努利 danidbernoulli,1700 1782 提...