动态规划-背包问题 public ArrayList getMaxValueGoods(HashMap<Integer, Backpack> map, int maxVolume) { int[][] temp = new int[map.values().size() + 1][maxVolume + 1]; //i : 物品编号 Iterator<Integer> iterator = map.keySet().iterator(); while (iterator.hasNext()) { int i = iterator.next().intValue(); //j : 背包容量 for (int j = 1; j < maxVolume + 1; j++) { //判断是否可以装下当前物品 if (map.get(i).getVolume() <= j) { int remainVolume = j - map.get(i).getVolume(); int holdValue = temp[i - 1][remainVolume] + map.get(i).getValue(); int notHoldValue = temp[i - 1][j]; temp[i][j] = holdValue > notHoldValue ? holdValue : notHoldValue; } else { //如果没有,取上个最大值 temp[i][j] = temp[i - 1][j]; } } } //最大值temp[map.values().size()][maxVolume] ArrayList result = new ArrayList(); int tempValueCode = map.values().size(); int tempValueVolume = maxVolume; while (tempValueCode != 0) { if (temp[tempValueCode][tempValueVolume] - temp [tempValueCode - 1][tempValueVolume] != 0) { result.add(tempValueCode); tempValueVolume = tempValueVolume - map.get(tempValueCode).getVolume(); } tempValueCode = tempValueCode - 1; } return result; } @Getter @Setter class Backpack { private int code; private int volume; private int value; }
动态规划-背包问题
最新推荐文章于 2024-01-19 20:17:21 发布