利用贪心算法求解背包问题,用C语言写出完整代码
时间: 2023-07-25 18:09:01 浏览: 95
以下是利用贪心算法求解背包问题的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_N 1000
typedef struct {
int w; // 物品重量
int v; // 物品价值
double r; // 单位重量价值
} Item;
int cmp(const void *a, const void *b) {
Item *x = (Item *)a;
Item *y = (Item *)b;
return y->r > x->r ? 1 : -1;
}
int main() {
int n, W;
Item items[MAX_N];
scanf("%d %d", &n, &W);
for (int i = 0; i < n; i++) {
scanf("%d %d", &items[i].w, &items[i].v);
items[i].r = (double)items[i].v / items[i].w;
}
qsort(items, n, sizeof(Item), cmp);
int ans = 0;
for (int i = 0; i < n && W > 0; i++) {
int num = W / items[i].w;
ans += num * items[i].v;
W -= num * items[i].w;
}
printf("%d\n", ans);
return 0;
}
```
该程序读入了物品数量n和背包容量W,以及n个物品的权重w和价值v,然后按照单位重量价值r从大到小排序,接着从大到小枚举物品,每次尽量放入剩余容量最大的物品,直到背包放不下为止。最后输出背包中物品的总价值。
阅读全文