背包问题C语言代码
时间: 2023-07-07 10:11:56 浏览: 87
好的,下面是使用C语言实现0-1背包问题的代码:
```c
#include <stdio.h>
#include <stdlib.h>
int max(int a, int b) {
return a > b ? a : b;
}
int main() {
int n, c;
scanf("%d %d", &n, &c);
// 定义二维数组
int **dp = (int **)malloc(sizeof(int*) * (n + 1));
for (int i = 0; i <= n; i++) {
dp[i] = (int *)malloc(sizeof(int) * (c + 1));
}
// 初始化第一行和第一列
for (int i = 0; i <= c; i++) {
dp[0][i] = 0;
}
for (int i = 0; i <= n; i++) {
dp[i][0] = 0;
}
// 动态规划
for (int i = 1; i <= n; i++) {
int w, v;
scanf("%d %d", &w, &v);
for (int j = 1; j <= c; j++) {
if (j < w) {
dp[i][j] = dp[i-1][j];
} else {
dp[i][j] = max(dp[i-1][j], dp[i-1][j-w] + v);
}
}
}
// 输出结果
printf("%d\n", dp[n][c]);
// 释放内存
for (int i = 0; i <= n; i++) {
free(dp[i]);
}
free(dp);
return 0;
}
```
注意,为了防止溢出,建议使用动态内存分配来定义二维数组。
阅读全文