題目大意
給你n個盒子,每個盒子裡可以放0或者1,可以只放乙個,可以都放,可以都不放,現在有a個1,b個0,每個1或每個0各不相同,問你有多少種方案去放。
資料範圍
a,b≤50,n+a\le 50n+a≤50,n+b\le 50n+b≤50
思路
注意每個1(或者0)都不同,這卡了我很久。 ,這題很容易想到組合數學的解法。因為互不影響,我們可以先放1,再放0。對於放1,我們可以在a個1中選取i個1,然後再n個位置裡選i個位置放1,就相當於cn
i *ca
i,對0同理。最後對放1的方案數和放0的方案數相乘就行了。
但是如果我們按照公式,用階乘去算組合數,會爆精度,所以我們要另闢蹊徑。
之前寫過一篇楊輝三角求組合數的問題,這裡可以用上。資料開ull。
#include
using
namespace std;
const
int n=
1e3+5;
const
int inf=
0x7fffffff
;const
int mod=
1e9+7;
const
int eps=
1e-6
;typedef
long
long ll;
typedef
unsigned
long
long ull;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define pii pair
#define int long long
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define endl '\n'
ull c[n]
[n];
void
zuhe()
}}signed
main()
res=tt;tt=0;
for(
int i=
0;i<=
min(b,n)
;i++
) res*
=tt;
cout<}
組合數(楊輝三角)
原來組合數和楊輝三角是有關係的 楊輝三角上的每乙個數字都等於它的左上方和右上方的和 除了邊界 第n行,第m個就是,就是c n,m 從0開始 所以以後求楊輝三角或者組合數都可以用到下面的遞推公式 includeconst int n 2000 5 const int mod int 1e9 7 int...
組合數 楊輝三角
不難想到,我們可以用二維陣列來實現。上 include intmain i,j scanf d n for i 1 i n i a i 1 1 for i 2 i n i for i 1 i n i printf n return0 這樣我們實現了楊輝三角。更近一步,我們得到 用遞迴的辦法來實現也可...
楊輝三角與組合數
相信大部分oier已經對楊輝三角很熟悉了,我第一次做楊輝三角的時候是剛學完for迴圈,有一道題是列印楊輝三角的,那時起,我就對這個幾何圖形的構造方式充滿了興趣。最近,在老師的引導下,我學習了有關楊輝三角的乙個小秘密。本文將簡單介紹楊輝三角與組合數之間的聯絡。如果將 a b n a b n a b n...