01背包动态规划算法可能有很多人不理解,贴出一个利用递归穷举法解决01背包问题的代码
package homework;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* Created by fushuang on 2016/8/15.
*/
public class bahe {
public static int jishu=0;
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int count=scanner.nextInt();
int sum=0;
ArrayList<Integer> list = new ArrayList<>();
ArrayList<Integer> firstlist = new ArrayList<>();
for (int i = 0; i <count ; i++) {
int a=scanner.nextInt();
list.add(i,a);
sum=sum+a;
}
System.out.println(list);
sum=sum/2;
count=count/2;
System.out.println("第一队与平均值之间的差值:"+func(list, sum, count, firstlist));
System.out.println("第一队的人为"+firstlist);
list.removeAll(firstlist);
System.out.println("第二队的人为"+ list);
System.out.println(jishu);
}
public static int func(List<Integer> list,int sum,int count,List<Integer> firstlist){
ArrayList<Integer> finallist=new ArrayList<>();
if (firstlist.size()==count){
int first_sum=0;
for (Integer a : firstlist) {
first_sum=first_sum+a;
}
return Math.abs(first_sum-sum);
}else {
int min=Integer.MAX_VALUE;
for (int i = 0; i < list.size(); i++) {
ArrayList<Integer> templist = new ArrayList<>(list);
ArrayList<Integer> ftemlist = new ArrayList<>(firstlist);
ftemlist.add(templist.remove(i));
int func = func(templist, sum, count, ftemlist);
jishu++;
if (func<min){
min=func;
finallist.clear();
finallist.addAll(ftemlist);
}
}
firstlist.clear();
firstlist.addAll(finallist);
return min;
}
}
}