Загрузка данных


#include <iostream>
using namespace std;

int main()
{
    int w[] = {3, 2, 4, 1, 3, 1};      // веса
    int v[] = {55, 80, 60, 45, 105, 50}; // стоимости

    int n = sizeof(v) / sizeof(int);   // количество предметов
    int p = 9;                         // вместимость рюкзака

    int i, j;

    // создаём таблицу (n+1) x (p+1)
    int** c = new int*[n + 1];
    for (i = 0; i <= n; i++)
        c[i] = new int[p + 1]();

    // заполнение таблицы динамики
    for (i = 1; i <= n; i++)
    {
        for (j = 0; j <= p; j++)
        {
            if (w[i - 1] <= j)
            {
                c[i][j] = max(c[i - 1][j], c[i - 1][j - w[i - 1]] + v[i - 1]);
            }
            else
            {
                c[i][j] = c[i - 1][j];
            }
        }
    }

    // вывод таблицы
    cout << "Таблица динамики:\n";
    for (i = 0; i <= n; i++)
    {
        for (j = 0; j <= p; j++)
            cout << c[i][j] << "\t";
        cout << endl;
    }

    cout << "\nМаксимальная стоимость = " << c[n][p] << endl;

    // восстановление выбранных предметов
    cout << "Выбранные предметы:\n";
    j = p;
    for (i = n; i > 0; i--)
    {
        if (c[i][j] != c[i - 1][j])
        {
            cout << "Предмет " << i 
                 << " (вес = " << w[i - 1] 
                 << ", стоимость = " << v[i - 1] << ")\n";
            j -= w[i - 1];
        }
    }

    // освобождение памяти
    for (i = 0; i <= n; i++)
        delete[] c[i];
    delete[] c;

    return 0;
}