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;
}

posted @ 2024-06-05 21:54  CV小能手chh  阅读(8)  评论(0)    收藏  举报  来源