#include<stdio.h>#include<stdbool.h>// 计算两个数中的较大值intmax(int a, int b){
return (a > b) ? a : b;
}
// 背包问题的算法设计函数intknapsack(int W, int weight[], int value[], 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;
elseif (weight[i-1] <= w)
K[i][w] = max(value[i-1] + K[i-1][w-weight[i-1]], K[i-1][w]);
else
K[i][w] = K[i-1][w];
}
}
// 返回最优解(最大价值)return K[n][W];
}
intmain(){
int n, W;
printf("请输入物品数量:");
scanf("%d", &n);
int weight[n], value[n];
printf("请依次输入每个物品的重量和价值:\n");
for (int i = 0; i < n; i++) {
scanf("%d %d", &weight[i], &value[i]);
}
printf("请输入背包的最大承载重量:");
scanf("%d", &W);
int maxValue = knapsack(W, weight, value, n);
printf("最大价值为:%d\n", maxValue);
return0;
}