无界背包,以最大限度地减少总价值

时间:2015-10-31 01:23:51

标签: dynamic

我正在尝试找到最小背包问题的解决方案(利润最少的一组项目,使所选项目的总重量至少为容量C。)

我正在尝试修改以下最大背包问题以获得最小版本但没有成功。

有人可以帮忙解决这个问题吗?

public class UnboundedKnapSack {
public static int fillTable(int capacity, int[] weight, int[] value) {
    int i, j;
    int[][] maxValue = new int[value.length][capacity + 1];

    for (j = 0; j < weight[0]; j++) {
        maxValue[0][j] = 0;
    }
    for (j = 0; j <= capacity; j++) {
        maxValue[0][j] = value[0] * (j / weight[0]);
    }

    for (i = 1; i < value.length; i++) {
        for (j = 0; j < weight[i]; j++) {
            maxValue[i][j] = maxValue[i - 1][j];
        }
        for (j = weight[i]; j <= capacity; j++) {
            maxValue[i][j] = Math.max(maxValue[i - 1][j], value[i] + maxValue[i][j - weight[i]]);
        }
    }
    return maxValue[value.length - 1][capacity];
}   
}

0 个答案:

没有答案