01背包问题动态规划c源代码
时间: 2024-04-09 20:25:19 浏览: 95
01背包问题是一个经典的动态规划问题,它的目标是在给定一组物品和一个背包的容量下,选择一些物品放入背包中,使得放入背包的物品总价值最大,同时不能超过背包的容量。
以下是01背包问题的动态规划解法的C源代码示例:
```c
#include <stdio.h>
// 定义最大物品数量和背包容量
#define MAX_N 100
#define MAX_W 1000
// 物品的价值和重量
int value[MAX_N];
int weight[MAX_N];
// 动态规划数组
int dp[MAX_N][MAX_W];
// 01背包问题的动态规划解法
int knapsack(int n, int w) {
// 初始化边界条件
for (int i = 0; i <= n; i++) {
dp[i][0] = 0;
}
for (int j = 0; j <= w; j++) {
dp[0][j] = 0;
}
// 动态规划求解
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= w; j++) {
if (weight[i] > j) {
dp[i][j] = dp[i - 1][j];
} else {
dp[i][j] = (dp[i - 1][j] > dp[i - 1][j - weight[i]] + value[i]) ? dp[i - 1][j] : dp[i - 1][j - weight[i]] + value[i];
}
}
}
// 返回最大价值
return dp[n][w];
}
int main() {
int n, w;
printf("请输入物品数量和背包容量:");
scanf("%d %d", &n, &w);
printf("请输入每个物品的价值和重量:\n");
for (int i = 1; i <= n; i++) {
scanf("%d %d", &value[i], &weight[i]);
}
int max_value = knapsack(n, w);
printf("背包能装下的最大价值为:%d\n", max_value);
return 0;
}
```
希望以上代码能够帮助到你!
阅读全文