題意:
1-n的排列,然後問多少個排列前m個中有且僅有k個在原來位置上。
思路:
組合數學,參考了別人**。
對於前面確定的k個,可以在最後答案時乘上c[m][k]表示選取方案,現在假設已經確定哪些數。然後表示剩下的m-k個都不在自己位置上的方案,注意不是n-k個,自己寫的時候卡在這裡。
然後就是簡單的容斥原理~
注意組合數的求法用c[i][j] = c[i-1][j-1] + c[i-1][j],好寫而且方便。
原始碼:
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
#define ll long long
#define mod (1000000007)
const
int maxn = 1000 + 5;
ll rev[maxn], fac[maxn];
ll c[maxn][maxn];
ll ppow(ll a, int x)
return ans;
}void init()
// c[0][0] = 1;
// for(int i = 1 ; i < maxn ; i++)
fac[0] = 1;
for(int i = 1 ; i < maxn ; i++) fac[i] = (fac[i - 1] * i) % mod;
}int main()
ans = (ans % mod + mod) % mod;
ans = (ans * c[m][k]) % mod;
printf("case %d: ", cas);
cout
<< ans << endl;
}return
0;}
UVA 11609 組合數學
題意 求sigma i c n,i 因為i c n,i i n n 1 n i 1 i n n 1 n 2 1 i 1 n i 1 c n,i 1 所以 i 1 c n,i 1 i c n,i n c n,i 1 所以這個求和式的沒兩項都能合併,提出乙個 n的公約數後,最後就是n c n,0 c n...
UVa11609 Teams(組合數學)
簡介 有n個人,選乙個或多個人參加比賽,從中選1個人當隊長,有多少種方案 分析 可以理解為,從n個人中選i個,再從這i個中選乙個當隊長 直接計算上式,時間不優秀,所以我們考慮畫柿子 上式實際上就是楊輝三角的第n行,每乙個數乘以乙個係數相加的結果 當n 5時 ans 1 c 5,1 2 c 5,2 3...
數學2 2 組合數學與計數
洛谷的專題qwqqqqq 亂序按心情做也不一定做得完 三分鐘熱度就有三分鐘的收穫 但是我永遠喜歡演算法 組合數學的靈魂大概就是原公式和3條性質叭qwq 混亂發言 還有個二項式定理 lucas定理和catalan數來著 藍皮書上有,此處不多加贅述。思路 因為資料範圍較小,但是詢問次數較多,所以可以先預...