01背包问题
样例输入:
物品总个数:4,背包总容量:15
第1个物品的体积,价值:2,10
第2个物品的体积,价值:5,20
第3个物品的体积,价值:9,30
第4个物品的体积,价值:7,25
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
int max(int a, int b);
int N, V; //N:物品总数量,V:背包总容量
int v[1000], w[1000]; //v[i]:单个物品体积,w[i]:单个物品价值
int dp[1000] = { 0 };
printf("请输入物品总数量,背包总容量:\n");
scanf("%d,%d", &N, &V);
int i, j;
for (i = 1; i <= N; i++){
printf("请输入第%d个物品的体积,价值:\n",i);
scanf("%d,%d", &v[i], &w[i]);
for (j = V; j >= v[i]; j--) { //j表示剩余容量
dp[j] = max(dp[j], dp[j - v[i]] + w[i]);//判断是否应该装下
}
}
printf("最大价值:%d", dp[V]);
return 0;
}
int max(int a, int b) {
return (a > b ? a : b);
}