組合數計算

2021-10-06 23:53:10 字數 1535 閱讀 3484

zoj

2290

jzoj\ 2290

jzoj22

90計算組合數:

其中n

nn、m

mm和c(n

,m

)c(n, m)

c(n,m)

均滿足64

6464

位無符號整數取值範圍

第一行為乙個整數t(1

<=t

<=10

)t (1 <= t <= 10)

t(1<=t

<=1

0),表示測試資料組數。

接下來t

tt行,每行有兩個數,分別為n

nn和mmm。

對於每一對n

nn和m

mm,輸出c(n

,m

)c(n, m)

c(n,m)

的值。每組資料各佔一行。

242

53

6

10

這個其實就是中國剩餘定理。

我們直接楊輝三角暴力出2000

2000

2000

以內的,然後再把一些特殊情況直接列出來。(為了省時間)

接著就中國剩餘定理就完事了。

#include

#include

#include

#define rr register

#define ll unsigned long long

using

namespace std;

ll t, n, m, ans, c[

2001][

2001];

bool in[

10001];

intmain()

for(rr ll i =

1; i <=

2000

;i ++

)for

(rr ll j =

1; j < i; j++

) c[i]

[j]= c[i -1]

[j]+ c[i -1]

[j -1]

;//直接暴力求2000內答案

scanf

("%llu"

,&t)

;//讀入

for(ll t =

1; t <= t; t++)if

(n == m || n - m == n)

if(n - m ==

1|| m ==1)

ans =1;

memset

(in,0,

sizeof

(in));

//初始化

for(rr ll i =

max(m, n - m)+1

; i <= n; i++)}

printf

("%llu\n"

, ans)

;//輸出

}return0;

}

計算組合數

1.防溢位 如果直接用c n,m n!n m m 來程式設計很可能會在算n!時就爆了long long,所以每一步最好把除分母也算上。所以對於c n,m 來說取m min m,n m 來算c n,m n n 1 n 2 n m 1 m m 1 m 2 1 顯然分子分母都是m項相乘,從後往前去算 先算...

計算組合數

計算組合數 time limit 1000ms memory limit 32768kb submit statistic problem description 計算組合數。c n,m 表示從n個數中選擇m個的組合數。計算公式如下 若 m 0,c n,m 1 否則,若 n 1,c n,m 1 否則...

計算組合數

time limit 1000 ms memory limit 32768 kib problem description 計算組合數。c n,m 表示從n個數中選擇m個的組合數。計算公式如下 若 m 0,c n,m 1 否則,若 n 1,c n,m 1 否則,若m n,c n,m 1 否則 c n...