商店有商店有 n 个糖果,每个糖果的价格为 a ;元。小美很喜欢吃糖果,可她的钱不多,她想用她不多的钱买尽可能多的糖果。现在有 Q 组询问,第 i 次询问你需要回答当小美有 q ,块钱时她最多能买多少种类糖果。请用c语言写程序回答
时间: 2024-12-20 14:16:01 浏览: 17
为了解决这个问题,我们可以编写一个简单的C语言程序,它采用动态规划的方法。首先,我们需要初始化一个数组`dp[q]`,其中`dp[i]`表示小美拥有`i`元钱时可以购买到的最大糖果种类数。
```c
#include <stdio.h>
// Function to find the maximum number of unique candies with a given budget
int maxUniqueCandies(int n[], int a[], int q, int money) {
int dp[money + 1]; // Initialize the dynamic programming array
memset(dp, 0, sizeof(dp)); // Set all values to zero
for (int i = 0; i <= money; ++i) { // Iterate over all possible budgets
for (int j = 0; j < n && i >= a[j]; ++j) { // Check if we can afford the current candy
dp[i] = max(dp[i], dp[i - a[j]] + 1); // Update the maximum if buying this candy increases variety
}
}
return dp[money];
}
int main() {
int n, a[1000], q;
scanf("%d", &n);
for (int i = 0; i < n; ++i) {
scanf("%d", &a[i]);
}
scanf("%d", &q);
for (int i = 0; i < q; ++i) {
int q_value;
scanf("%d", &q_value);
int result = maxUniqueCandies(n, a, q, q_value);
printf("Case %d: You can buy %d types of candies.\n", i + 1, result);
}
return 0;
}
```
这个程序首先读取糖果的数量`n`、每个糖果的价格`a[]`以及查询次数`q`。对于每组查询,它会输入小美的预算`money`,然后计算并打印出可以用这预算买到的最大糖果种类数。
阅读全文