c语言动态规划计算0-1背包,c语言代码
时间: 2024-12-06 12:33:50 浏览: 44
在C语言中,动态规划是一种常见的解决背包问题(如0-1背包问题)的方法。这种问题通常涉及在一个有限的容量下选择物品以最大化总价值。以下是基本的动态规划算法的C语言实现:
```c
#include <stdio.h>
int knapsack(int W, int wt[], int val[], int n) {
int i, w;
int K[n+1][W+1];
// 初始化二维数组
for (i = 0; i <= n; i++) {
for (w = 0; w <= W; w++) {
if (i == 0 || w == 0)
K[i][w] = 0;
else if (wt[i-1] <= w)
K[i][w] = max(val[i-1] + K[i-1][w-wt[i-1]], K[i-1][w];
}
}
return K[n][W];
}
// 使用上面的函数计算给定背包的最大价值
int main() {
int val[] = {60, 100, 120};
int wt[] = {10, 20, 30};
int W = 50;
int n = sizeof(val)/sizeof(val[0]);
printf("最大价值: %d", knapsack(W, wt, val, n));
return 0;
}
```
在这个代码中,`knapsack`函数是一个动态规划的解决方案,它创建了一个二维数组`K`,其中`K[i][w]`表示在前`i`个物品中选择总重量不超过`w`的物品的最大价值。函数通过比较包含当前物品的价值加上剩余背包容量可以携带物品的最大价值和不包含当前物品的情况,选择了最优解。
阅读全文