有四种面值不一样的货币分别是10元,5元,2元,1元。现在给你一个钱数你能求求它的组成方法都有多少吗? 输入格式: 一个数n(0<n<=2^32) 输出格式: 一个值代表有多少种方法。 输入样例: 10 输出样例: 11 用c语言写代码
时间: 2024-02-28 08:53:51 浏览: 85
好的,这是一个经典的动态规划问题,我们可以使用一个数组dp[i]表示钱数为i时的组成方法数,递推式为dp[i] = dp[i] + dp[i-c[j]],其中c[j]表示第j种货币的面值。具体实现代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define MAXN 1000000
int dp[MAXN];
int main()
{
int n, i, j;
int c[4] = {1, 2, 5, 10};
memset(dp, 0, sizeof(dp));
dp[0] = 1;
scanf("%d", &n);
for (i = 0; i < 4; i++) {
for (j = c[i]; j <= n; j++) {
dp[j] += dp[j - c[i]];
}
}
printf("%d\n", dp[n]);
return 0;
}
```
注意,这里的数组dp要开到足够大的范围,否则会导致数组越界错误。
阅读全文