C语言写,给你n个物品,每个物品都有一个价值,先拿走总和大于等于k价值的物品,问最少拿走多少物品的代码
时间: 2023-04-01 13:05:04 浏览: 141
以下是 CSDN AI 语言模型的回答:
这个问题可以用贪心算法来解决。首先将物品按照价值从大到小排序,然后从最大价值的物品开始依次取走,直到总和大于等于 k 为止。以下是 C 语言的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
int cmp(const void *a, const void *b) {
return *(int *)b - *(int *)a;
}
int main() {
int n, k;
scanf("%d%d", &n, &k);
int *a = (int *)malloc(n * sizeof(int));
for (int i = ; i < n; i++) {
scanf("%d", &a[i]);
}
qsort(a, n, sizeof(int), cmp);
int sum = , ans = ;
for (int i = ; i < n; i++) {
sum += a[i];
ans++;
if (sum >= k) {
printf("%d\n", ans);
return ;
}
}
printf("-1\n");
return ;
}
```
输入格式为 n 和 k,表示物品的数量和总和的最小值。接下来一行输入 n 个整数,表示每个物品的价值。程序首先将物品按照价值从大到小排序,然后依次取走物品,直到总和大于等于 k 为止。如果无法取走总和大于等于 k 的物品,则输出 -1。