01背包c++
思路看书去
#include <iostream>
using namespace std;
// 物品数量
#define N 4
// 背包大小
#define R 5
int value[N] = {2, 4, 4, 5};
int weigh[N] = {1, 2, 3, 4};
// #define N 20
// #define R 200
// int weigh[N] = {24, 42, 20, 7, 48, 4, 3, 7, 52, 50, 5, 9, 14, 9, 55, 40, 35, 33, 12, 65};
// int value[N] = {50, 60, 49, 15, 115, 11, 8, 5, 66, 25, 8, 25, 40, 22, 42, 30, 49, 16, 12, 127};
int bag[N + 1][R + 1];
int Bag()
{
for (int i = 0; i <= N; i++)
bag[i][0] = 0;
for (int j = 0; j <= R; j++)
bag[0][j] = 0;
for (int i = 1; i <= N; i++)
for (int j = 1; j <= R; j++)
if (j < weigh[i - 1])
bag[i][j] = bag[i - 1][j];
else
bag[i][j] = max(bag[i - 1][j], bag[i - 1][j - weigh[i - 1]] + value[i - 1]);
return bag[N][R];
}
void printans()
{
int i = N, j = R;
while (i > 0 && j > 0)
{
if (bag[i][j] > bag[i - 1][j])
{
cout << "第" << i << "个物品放入背包" << endl;
j -= weigh[i - 1];
}
i--;
}
}
int main()
{
int i = Bag();
cout << "最大价值为:" << i << endl;
cout << "物品选择情况为:" << endl;
printans();
system("pause");
return 0;
}

浙公网安备 33010602011771号