#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main() {
//1.键盘录入一个常量,用来表示 物品的种类, n = 5;
//2.键盘录入一个常量,用来表示 背包的容量, c = 10;
//3.创建一个整型数组,用来收纳 每个物品的重量,int weight[]; 数据: 1 4 2 5 2
//4.创建一个整型数组,用来收纳 每个物品的价值, int value[]; 数据: 1 6 5 3 1
//5.创建一个函数,用来表示01背包的进行的过程。
int zero(int n, int c, int weight[], int value[]);//声明函数
//1.键盘录入一个常量,用来表示 物品的种类, n = 5;
printf("请输入物品的种类:");
int n=0;
scanf_s("%d", &n);
//2.键盘录入一个常量,用来表示 背包的容量, c = 10;
printf("请输入物品的容量:");
int c=0;
scanf_s("%d", &c);
//3.创建一个整型数组,用来收纳 每个物品的重量,int weight[];
printf("请输入每个物品的重量:");
int weight[5] = { 0 };
int sz = sizeof(weight)/sizeof(weight[0]);
for (int i = 0; i < sz; i++)
{
scanf_s("%d", &weight[i]);
}
//4.创建一个整型数组,用来收纳 每个物品的价值, int value[];
printf("请输入每个物品的价值:");
int value[5] = { 0 };
int sz1 = sizeof(value) / sizeof(value[0]);
for (int i = 0; i < sz1; i++)
{
scanf_s("%d", &value[i]);
}
int sb = zero(5, 10, weight, value);
printf("%d", sb);
return 0;
}
//5.创建一个函数,用来表示01背包的进行的过程。
int zero(int n, int c, int weight[], int value[])
{
int dp[6][11] = { 0 }; //数组使用时都要进行初始化。要不然容易报错。
int Max(int a,int b);//声明函数
for (int i = 1; i <=n; i++)
{
int w1 = weight[i - 1];
int v = value[i - 1];
for (int j = 1; j <= c; j++)
{
if (j < w1)
{
dp[i][j] = dp[i - 1][j];
continue;
}
else
{
dp[i][j] = Max(dp[i - 1][j], dp[i - 1][j - w1] + v);
}
}
}
return dp[n][c];
}
int Max(int a, int b)
{
if(a>=b)
{
return a;
}
else
{
return b;
}
}
/二维数组使用时都要进行初始化。要不然容易报错。