01背包动态规划 c语言
时间: 2023-08-26 11:06:53 浏览: 91
好的,我可以为您提供01背包动态规划的C语言代码示例,代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#define max(a, b) ((a) > (b) ? (a) : (b))
int main()
{
int n, W;
scanf("%d %d", &n, &W);
// 申明动态数组
int *w = (int *)malloc(sizeof(int) * n);
int *v = (int *)malloc(sizeof(int) * n);
int **dp = (int **)malloc(sizeof(int *) * (n + 1));
for (int i = 0; i <= n; i++) {
dp[i] = (int *)malloc(sizeof(int) * (W + 1));
}
// 输入物品的重量和价值
for (int i = 0; i < n; i++) {
scanf("%d %d", &w[i], &v[i]);
}
// 初始化
for (int i = 0; i <= W; i++) {
dp[0][i] = 0;
}
// 动态规划
for (int i = 1; i <= n; i++) {
for (int j = 0; j <= W; j++) {
if (j < w[i - 1]) {
dp[i][j] = dp[i - 1][j];
} else {
dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - w[i - 1]] + v[i - 1]);
}
}
}
printf("%d\n", dp[n][W]);
// 释放动态数组
for (int i = 0; i <= n; i++) {
free(dp[i]);
}
free(dp);
free(w);
free(v);
return 0;
}
```
该代码实现了01背包动态规划的过程,通过输入物品的重量和价值,以及背包的容量,计算出在背包容量为W的情况下,能够获得的最大价值。
阅读全文