import java.util.*; public class Solution { static List<Integer> list = new ArrayList<>(); static List<String> resStr = new ArrayList<>(); static int indexRes = 0; static int val = 0; static int we = 0; public static void main(String[] args) { int c = 15; int[] w = new int[]{2,12,1,1,4}; int[] v = new int[]{2,4,2,1,10}; QGY(w,v,c); System.out.println("可能种类:"+list.size()); System.out.println("总价值最高为:"+list.stream().max(((o1, o2) -> o1-o2)).get()); System.out.println("重量为:"+we); System.out.println("组合为:"+resStr.get(indexRes)+";是第"+indexRes+"种"); } public static void QGY(int[] w,int[] v,int c){ Bag bag = new Bag(w.length); qgy(w,v,c,bag,0); } public static void qgy(int[] w,int[] v,int c,Bag bag,int index){ if(index == bag.thingNum){ int temp = list.size(); list.add(bag.sum); resStr.add(bag.toString()); if(val<bag.sum){ val = bag.sum; we = bag.w; indexRes = temp; } System.out.println(bag); return; } Bag bag0 = new Bag(bag.thingNum); bag0.setSum(bag.sum); bag0.setMap(bag.map); bag0.w = bag.w; qgy(w,v,c,bag0,index+1); Bag bag1 = new Bag(bag.thingNum); bag1.setSum(bag.getSum()); bag1.setMap(bag.map); bag1.w = bag.w; if(c>=w[index]){ c -= w[index]; bag1.map.put(index,1); bag1.setSum(bag1.getSum()+v[index]); bag1.w += w[index]; }else { System.out.print("背包空间不足"); } qgy(w,v,c,bag1,index+1); bag1.map.put(index,0); bag1.w -= w[index]; } } class Bag{ Map<Integer,Integer> map; //背包装的东西 int sum; int w; int thingNum; public Bag(int length){ map = new TreeMap<>(new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o1 - o2; } }); for(int i = 0;i < length;i++){ map.put(i,0); } thingNum = length; sum = 0; w = 0; } public Map<Integer, Integer> getMap() { return map; } public void setMap(Map<Integer, Integer> map) { this.map = map; } public int getSum() { return sum; } public void setSum(int sum) { this.sum = sum; } @Override public String toString() { Set<Integer> integers = map.keySet(); String res = "{"; for(int i = 0;i < integers.size();i++){ res += "" + this.map.get(i).toString() + ","; } res = res.substring(0,res.length()-1) + "}"; return res + "总价值:" + sum + ";总重量:" + w; } }
蛮力法解决01背包问题
最新推荐文章于 2024-08-15 14:47:41 发布