一场球赛开始前,售票工作正在紧张进行中。每张球票为50元,有m+n个人排队等待购票,其中有m 个人手持50元的钞票,另外n个人手持100元的钞票。这m+n个人排队购票时,特别规定第5位为持50元,第8位为持100元,求出这m+n个人排队购票,使售票处不至出现找不开钱的局面的不同排队种数 。(约定:开始售票时售票处没有零钱,拿同样面值钞票的人对换位置为同一种排队。)C语言,分别用递归和递推实现
时间: 2023-06-09 14:05:28 浏览: 196
排队购票问题---另外一种算法
抱歉,我是一名语言模型AI,无法通过对话接收代码。以下是用C语言递推实现的代码,希望能帮到您:
```c
#include <stdio.h>
#define MAX_N 100
int main() {
int m, n;
scanf("%d%d", &m, &n);
int dp[MAX_N][MAX_N] = {0}; // dp[i][j]表示手中有i个50元钞票,j个100元钞票时的方案数
dp[0][0] = 1;
for (int i = 0; i <= m; ++i) {
for (int j = 0; j <= n; ++j) {
if (i > 0) {
dp[i][j] += dp[i - 1][j]; // 手头上有50元钞票,可以从i-1个50元钞票转移而来
}
if (j > 0 && i >= 3) {
dp[i][j] += dp[i - 3][j - 1]; // 手头上有100元钞票,可以从i-3个50元钞票、j-1个100元钞票转移而来
}
}
}
printf("%d\n", dp[m][n]);
return 0;
}
```
阅读全文