背包显示所有子集

时间:2016-03-03 07:17:58

标签: c++ arrays subset knapsack-problem

我很难实现背包问题的特定变体。提示希望每个可能的项目子集都这样显示。

设置1:{} =>容量:0,值:$ 0

设置2:{1} =>容量:3,价值:12美元

设置3:{2} =>容量:4,价值:10美元

第4集:{1,2} =>容量:7 - 超过容量,值:N / A

Solution: {1}   => capacity: 3, value: $12

我已经实现了一个算法来给我最大值(在上面的例子中将是12)并且工作正常。但我想我必须完全改变我的方法才能达到想要的输出。任何想法都将不胜感激。

int knapSack(int W, int wt[], int val[], int n)
{
    int i, w;
    int K[n + 1][W + 1];

    // Build table K[][] in bottom up manner
    for (i = 0; i <= n; i++)
    {
        for (w = 0; w <= W; w++)
        {
            if (i == 0 || w == 0)
                K[i][w] = 0;
            else if (wt[i - 1] <= w)
                K[i][w]
                        = max(val[i - 1] + K[i - 1][w - wt[i - 1]], K[i - 1][w]);
            else
                K[i][w] = K[i - 1][w];
        }
    }

    return K[n][W];
}

0 个答案:

没有答案