求排列組合數C n,r

2021-07-11 01:51:40 字數 2068 閱讀 6452

#include

#include

using

namespace

std;

/*這是乙個求組合數c(n,r)的演算法程式。

*//*

楊輝三角:

0 1

1 1 1

2 1 2 1

3 1 3 3 1

4 1 4 6 4 1

5 1 5 10 10 5 1

0 1 2 3 4 5

c(n,r) =c(n-1,r)+c(n-1,r-1)

以c(5,3)為例:

c_matrix[r+1][n-r+1]

(n-r+1)

1 1 1

(r+1) 1 2 3 c(n-1.r-1)

1 3 6 |

1 4 10 /|\

|c(n-1,r)

c_matrix[r][n-r]=c(n,r);

*///複雜度o(r*(n-r))

long **c_matrix;

long c_n_r_version1(int n, int r)

//用1初始化第一行和第一列

for (int row1(0); row1 < (n - r + 1); row1++) c_matrix[0][row1] = 1;

for (int column1(0); column1 < r + 1; column1++) c_matrix[column1][0] = 1;

//自底向上迭代求解 c(n,r) =c(n-1,r)+c(n-1,r-1)

for (int row(1); row < r + 1; row++)

for (int column(1); column < (n - r + 1); column++)

c_matrix[row][column] = c_matrix[row][column - 1] + c_matrix[row - 1][column];

return c_matrix[r][n - r];

}long c_n_r_version2helper(int n, int r, long **cmatrix2)

//自頂向下遞迴求解 c(n,r) =c(n-1,r)+c(n-1,r-1)

return cmatrix2[r][n - r] = c_n_r_version2helper(n - 1, r, cmatrix2) + c_n_r_version2helper(n - 1, r-1, cmatrix2);

}//複雜度o(r*(n-r))

long **c_matrix2;

long c_n_r_version2(int n, int r)

//用1初始化第一行和第一列

for (int row1(0); row1 < (n - r + 1); row1++) c_matrix2[0][row1] = 1;

for (int column1(0); column1 < r + 1; column1++) c_matrix2[column1][0] = 1;

//用負無窮初始化其他數

for (int row(1); row < r + 1; row++)

for (int column(1); column < (n - r + 1); column++)

c_matrix2[row][column] = long_min;

//轉到遞迴呼叫

return c_n_r_version2helper(n, r, c_matrix2);

}int main()

輔助圖示:

排列組合(組合數)

儒雅隨和的小趙閒暇時很喜歡古典文學,比如金 金銀角大王和孫悟空。話說悟空一行在西天取經路上遇上了妖怪金角大王 銀角大王,把唐僧 八戒 沙僧 白馬,連行李一道擄去。兩個大王有幾個法寶,其中乙個是個魔葫蘆,妖怪叫誰的名字,誰應一聲,就被吸進葫蘆,兩個時辰化為膿水。孫悟空來鬥妖魔,魔王叫 孫悟空 他應了,...

排列 組合數學

定義 從n個不同的元素中,取出m個不同元素,按照順序排成一列,叫做從n個元素取出m個元素的乙個排列。我們將從n個不同的元素取出m個元素所得到得不同排列數,叫做從n個元素取出m個元素的排列數 記為a n,m 其中n m a n,m n n 1 n m 1 n n m 定義 n個不同元素中取m個不同元素...

c 排列組合排序 排列組合 組合數專題

書接上回,本期正男老師將帶大家梳理排列組合中組合數的相關考點,組合數考點可以細分為4類,分別為 分類數數問題 分組排序問題 塗色問題以及插棍問題。近六年高考真題中,組合數考點共涉及5道。組合數專題高考真題分布 組合數的定義以及公式如下圖所示。組合數定義 分類數數問題與排列問題中的窮舉問題相似,但分類...