#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道。組合數專題高考真題分布 組合數的定義以及公式如下圖所示。組合數定義 分類數數問題與排列問題中的窮舉問題相似,但分類...