UVA 19889 組合數學

2021-07-09 12:17:49 字數 1042 閱讀 6905

題意:

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數來著 藍皮書上有,此處不多加贅述。思路 因為資料範圍較小,但是詢問次數較多,所以可以先預...