Задача о множественном рюкзаке с Integer.MAX_Value - PullRequest
0 голосов
/ 06 мая 2020

У меня проблема с алгоритмом «Рюкзак с множественным выбором». У меня есть код (внизу), который является обычным рюкзаком. Моя проблема в том, что я должен сделать массив таким же, как Integer.MAX_Value -1. Поэтому мне нужно изменить цикл for, чтобы получить способ создать массив с max_value, но при этом сохранить правильный алгоритм для рюкзака.

Я работал над этой проблемой 3 часа. Пожалуйста, помогите ...

public static int pack(final ItemGroup[] itemGroups, final int weight) {

    if (weight<= 0 || itemGroups == null || itemGroups.length == 0) {
        throw new IllegalArgumentException("Failure.");
    }
    int i, w = 0;

    int[][] knapsack = new int[itemGroups.length + 1][weight+ 1];

    for (int a = 0; a <= weight- 1; a++) {
        knapsack[0][a] = 0;
    }

    for (i = 1; i <= itemGroups.length; i++) {
            for (w = 0; w <= weight; w++) {

                if (w >= 0) {
                    if (itemGroups[i - 1].getItems().get(0).getWeight() > w) {
                        knapsack[i][w] = knapsack[i - 1][w];

                    } else {
                        knapsack[i][w] = max(
                                itemGroups[i - 1].getItems().get(0).getProfit()
                                        + knapsack[i - 1][w - itemGroups[i - 1].getItems().get(0).getWeight()],
                                knapsack[i - 1][w]);
                    }
                }
            }
        }
    return knapsack[itemGroups.length][weight];
}

Заранее благодарим за ответ

...