计算组合数C(m,n)的值(n<=m<=10)。 输入 一行,两个整数m,n 输出 输出组合数c++
时间: 2023-06-28 15:11:04 浏览: 160
这道题可以使用递归或动态规划来解决。
方法一:递归
递归的思路是,如果要求C(m,n),可以先求C(m-1,n-1)和C(m-1,n),然后将它们相加。
代码如下:
```c++
#include <iostream>
using namespace std;
int C(int m, int n) {
if (n == 0 || n == m) {
return 1;
} else {
return C(m-1, n-1) + C(m-1, n);
}
}
int main() {
int m, n;
cin >> m >> n;
cout << C(m, n) << endl;
return 0;
}
```
方法二:动态规划
动态规划的思路是,建立一个二维数组dp,其中dp[i][j]表示C(i,j)的值。首先将dp数组的边界条件初始化为1,即dp[i][0]=1和dp[i][i]=1。然后从dp[2][1]开始,按照递推公式dp[i][j] = dp[i-1][j-1] + dp[i-1][j]计算dp数组的每个元素,最终得到dp[m][n]的值。
代码如下:
```c++
#include <iostream>
using namespace std;
int main() {
int m, n;
cin >> m >> n;
int dp[11][11] = {0};
for (int i = 0; i <= m; i++) {
dp[i][0] = 1;
dp[i][i] = 1;
}
for (int i = 2; i <= m; i++) {
for (int j = 1; j < i; j++) {
dp[i][j] = dp[i-1][j-1] + dp[i-1][j];
}
}
cout << dp[m][n] << endl;
return 0;
}
```
阅读全文