蛮力法求解0/1背包问题c语言
时间: 2023-12-08 22:03:37 浏览: 138
以下是使用蛮力法(暴力枚举)求解0/1背包问题的C代码:
```c
#include <stdio.h>
#define MAX_N 1000 // 最大物品数量
#define MAX_W 1000 // 最大背包容量
int N, W; // 物品数量和背包容量
int w[MAX_N], v[MAX_N]; // 物品的重量和价值
int max(int a, int b) {
return a > b ? a : b;
}
int solve() {
int res = 0;
// 枚举所有情况
for (int i = 0; i < (1 << N); i++) {
int sw = 0, sv = 0;
for (int j = 0; j < N; j++) {
if (i & (1 << j)) {
sw += w[j];
sv += v[j];
}
}
if (sw <= W) {
res = max(res, sv);
}
}
return res;
}
int main() {
scanf("%d%d", &N, &W);
for (int i = 0; i < N; i++) {
scanf("%d%d", &w[i], &v[i]);
}
printf("%d\n", solve());
return 0;
}
```
这个程序的基本思路是枚举所有可能的情况,然后计算每种情况下背包中物品的重量和价值,如果重量不超过背包容量,则更新最大价值。这个程序的时间复杂度是指数级别的,因此对于大规模问题来说并不实用。
阅读全文