用C语言贪心算法解决背包问题,数据手动输入
时间: 2023-08-12 17:13:47 浏览: 86
下面是使用C语言实现贪心算法解决背包问题,数据手动输入的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 物品结构体
typedef struct {
int weight; // 物品重量
int value; // 物品价值
} Item;
// 比较函数,用于按照单位价值排序
int cmp(const void *a, const void *b) {
Item *x = (Item *)a;
Item *y = (Item *)b;
double r1 = (double)x->value / x->weight;
double r2 = (double)y->value / y->weight;
if (r1 > r2)
return -1;
else if (r1 < r2)
return 1;
else
return 0;
}
int main() {
int n, W;
printf("请输入物品数量n和背包容量W:");
scanf("%d%d", &n, &W);
Item items[n];
printf("请依次输入每个物品的重量和价值:\n");
for (int i = 0; i < n; i++) {
scanf("%d%d", &items[i].weight, &items[i].value);
}
// 按单位价值排序
qsort(items, n, sizeof(Item), cmp);
int cur_weight = 0; // 当前已放入背包的物品总重量
double cur_value = 0.0; // 当前已放入背包的物品总价值
for (int i = 0; i < n; i++) {
if (cur_weight + items[i].weight <= W) {
cur_weight += items[i].weight;
cur_value += items[i].value;
} else {
int remain_weight = W - cur_weight;
cur_value += (double)remain_weight / items[i].weight * items[i].value;
break;
}
}
printf("放入背包的物品总价值为:%.2f\n", cur_value);
return 0;
}
```
这段代码实现了输入物品数量n和背包容量W,以及每个物品的重量和价值,然后按照单位价值排序,依次放入背包中,直到无法再放入为止。如果当前物品不能完全放入背包中,则按照比例计算其价值。最后输出放入背包的物品总价值。
阅读全文