楊輝三角與組合數

2021-09-14 03:19:34 字數 3239 閱讀 7070

相信大部分oier已經對楊輝三角很熟悉了,我第一次做楊輝三角的時候是剛學完for迴圈,有一道題是列印楊輝三角的,那時起,我就對這個幾何圖形的構造方式充滿了興趣。最近,在老師的引導下,我學習了有關楊輝三角的乙個小秘密。本文將簡單介紹楊輝三角與組合數之間的聯絡。

如果將(a+

b)n(a+b)^n

(a+b)n

(n

nn為非負整數)的每一項按字母a

aa的次數由小到大排列,就可以得到下面的等式:

( a+

b)0=

1(a+b)^0=1

(a+b)0

=1,它只有一項,係數為111;

( a+

b)1=

a+b(a+b)^1=a+b

(a+b)1

=a+b

,它有兩項,係數分別是1

11,111;

( a+

b)2=

a2+2

ab+b

2(a+b)^2=a^2+2ab+b^2

(a+b)2

=a2+

2ab+

b2,它有三項,係數分別是1

11,2

22,111;

( a+

b)3=

a3+3

a2b+

3ab2

+b3(a+b)^3=a^3+3a^2b+3ab^2+b^3

(a+b)3

=a3+

3a2b

+3ab

2+b3

,它有三項,係數分別是1

11,3

33,3

33,111;

……觀察右表,我們發現每一行的首末都是1,並且下一行的數比上一行多1個,中間各數都寫在上一行兩數中間,且等於它們的和,按照這個規律可以繼續將這個表寫下去:

**於網路,文段選自《北師大版義務教育教科書·數學》七年級下冊第25頁

楊輝三角在教科書裡,最初是被用來**(a+

b)n(a+b)^n

(a+b)n

的展開問題,通過發掘(a+

b)0(a+b)^0

(a+b)0

,( a+

b)1(a+b)^1

(a+b)1

,( a+

b)2(a+b)^2

(a+b)2

,( a+

b)3(a+b)^3

(a+b)3

的展開式,尋找到了展開式項數規律各項係數的規律,將這兩個規律進行有序排列,得到了楊輝三角。

組合數是指從n

nn個元素中選出m

mm個元素的所有組合個數,在高中數學作為選修課程,在資訊學競賽中作為必修課程,不僅出現在noip初賽,還有可能隱含在上機測試的題目中。

通用計算公式:cnm

=n!m

!(n−

m)!,

cn0=

1c^_=\frac,c^_=1

cnm​=m

!(n−

m)!n

!​,c

n0​=

1如果在求多個組合數的問題情況下,用程式實現組合數計算公式的時間複雜度會大大增加,下面通過楊輝三角與組合數的聯絡,使這時間複雜度降低。

解決問題:用動態規劃求從n

nn個元素中選出m

mm個元素的所有組合個數

設f [i

][j]

f[i][j]

f[i][j

]為已在i

ii個元素中抽取了j

jj將這兩種情況加起來便是f[i

][j]

f[i][j]

f[i][j

]的結果,由此得出式子:f[i

][j]

=f[i

−1][

j]+f

[i−1

][j−

1]f[i][j]=f[i-1][j]+f[i-1][j-1]

f[i][j

]=f[

i−1]

[j]+

f[i−

1][j

−1]

邊界條件

**

#

include

using

namespace std;

int n,m;

int f[

1005][

1005];

intmain()

for(

int i=

1;i<=n;i++

)for

(int j=

1;j) f[i]

[j]=f[i-1]

[j]+f[i-1]

[j-1];

cout<

[m];

return0;

}

至此,我們若將整個f

ff陣列按矩陣的格式輸出,且去掉矩陣中多餘的0:

for

(int i=

0;i<=

5;i++

)

我們會得到以下結果:

程式輸出了楊輝三角!!!並且楊輝三角中第i

ii行第j

jj列的數字正是cij

c^_ci

j​的結果!!!通過動態規劃這座橋梁,我們可以將組合數與楊輝三角聯絡起來,從今以後憑藉著f[i

][j]

=f[i

−1][

j]+f

[i−1

][j−

1]f[i][j]=f[i-1][j]+f[i-1][j-1]

f[i][j

]=f[

i−1]

[j]+

f[i−

1][j

−1]這個原理,我們在資訊學競賽的道路上,又多了一大解題利器。

組合數(楊輝三角)

原來組合數和楊輝三角是有關係的 楊輝三角上的每乙個數字都等於它的左上方和右上方的和 除了邊界 第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 這樣我們實現了楊輝三角。更近一步,我們得到 用遞迴的辦法來實現也可...

楊輝三角(組合數) 排列組合

一道虐我的數學題,今天太累了,就簡單聊聊思想核心 題目如下 特斯拉公司的六位密碼被輕鬆破解後,引發了人們對電動車的安全效能的懷疑。李華聽聞後,自己設計了一套密碼 假設安全系統中有n個儲存區,每個儲存區最多能儲存存2個種類不同的訊號 可以不儲存任何訊號 有0和1這兩種訊號,其中0有a個,1有b個,單獨...