蛮力法解决0-1背包问题C语言
时间: 2023-08-01 11:08:18 浏览: 229
好的,以下是使用蛮力法解决0-1背包问题的C语言代码示例:
```c
#include <stdio.h>
#define MAX_N 20
int w[MAX_N]; // 物品重量
int v[MAX_N]; // 物品价值
int n; // 物品数量
int C; // 背包容量
// 暴力枚举所有可能的物品选择方案
int brute_force() {
int max_value = 0; // 最大总价值
// 枚举所有可能的物品选择方案,共 2^n 种
for (int s = 0; s < (1<<n); s++) {
int cur_weight = 0; // 当前总重量
int cur_value = 0; // 当前总价值
// 遍历所有物品
for (int i = 0; i < n; i++) {
// 如果第 i 个物品被选择
if (s & (1<<i)) {
// 更新当前总重量和总价值
cur_weight += w[i];
cur_value += v[i];
}
}
// 如果当前总重量不超过背包容量,且总价值更大,则更新最大总价值
if (cur_weight <= C && cur_value > max_value) {
max_value = cur_value;
}
}
return max_value;
}
int main() {
// 读入数据
scanf("%d%d", &n, &C);
for (int i = 0; i < n; i++) {
scanf("%d%d", &w[i], &v[i]);
}
// 暴力枚举
int ans = brute_force();
printf("%d\n", ans);
return 0;
}
```
注意,这段代码仅仅是为了演示蛮力法的思路,实际应用中不建议使用蛮力法来解决0-1背包问题,因为其时间复杂度为O(2^n),对于数据规模较大的问题来说,计算时间会非常长。
阅读全文