C语言动态规划求组合数
时间: 2023-11-04 12:06:13 浏览: 204
动态规划是一种优化算法,可以用来求解很多组合问题,包括组合数问题。下面是使用动态规划求解组合数的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
int n, m, i, j;
scanf("%d %d", &n, &m);
int **dp = (int **)malloc(sizeof(int *) * (n + 1));
for (i = 0; i <= n; i++) {
dp[i] = (int *)malloc(sizeof(int) * (m + 1));
}
for (i = 0; i <= n; i++) {
dp[i][0] = 1;
}
for (i = 1; i <= n; i++) {
for (j = 1; j <= m; j++) {
dp[i][j] = dp[i-1][j-1] + dp[i-1][j];
}
}
printf("%d\n", dp[n][m]);
for (i = 0; i <= n; i++) {
free(dp[i]);
}
free(dp);
return 0;
}
```
运行程序后,输入n和m的值,即可得到组合数C(n,m)的结果。其中,dp[i][j]表示从i个元素中选出j个元素的组合数。```dp[i][0]```的值都为1,因为从i个元素中选出0个元素只有一种情况,即不选。接下来,根据组合数的递推公式:C(n,m) = C(n-1,m-1) + C(n-1,m),使用动态规划求解。最终,dp[n][m]即为所求的组合数。
阅读全文