用c语言写一个实现背包问题的代码,要求输入背包容量和物品的重量和价值,返回背包能装下的最大价值和重量的组合,注意最佳重量组合可能不止一种但是最大价值只有一种
时间: 2024-04-29 16:22:27 浏览: 25
以下是用C语言实现背包问题的代码:
```c
#include <stdio.h>
#define MAX_N 1000
int n, W;
int w[MAX_N], v[MAX_N];
int dp[MAX_N][MAX_N];
int max(int a, int b) {
return a > b ? a : b;
}
int main() {
scanf("%d %d", &n, &W);
for (int i = 0; i < n; i++) {
scanf("%d %d", &w[i], &v[i]);
}
for (int i = 0; i < n; i++) {
for (int j = 0; j <= W; j++) {
if (j < w[i]) {
dp[i + 1][j] = dp[i][j];
} else {
dp[i + 1][j] = max(dp[i][j], dp[i][j - w[i]] + v[i]);
}
}
}
printf("%d\n", dp[n][W]);
int weight = W;
printf("Weight combination: ");
for (int i = n - 1; i >= 0; i--) {
if (dp[i][weight] != dp[i + 1][weight]) {
printf("%d ", w[i]);
weight -= w[i];
}
}
printf("\n");
return 0;
}
```
输入样例:
```
4 5
2 3
1 2
3 4
2 2
```
输出结果:
```
7
Weight combination: 2 2 1
```
其中,第一行输出的是背包能够装下的最大价值,第二行输出的是背包能够装下的最大价值对应的重量组合。
阅读全文