package com.raylew.algorithm.book3;
/**
* Created by Raymond on 2016/9/27.
*/
public class 背包问题 {
//背包能承受的最大重量
public static int maxWeight=7;
//物品的价值
public static int[] values={5,7,15,9};
//物品的重量
public static int[] weights={1,2,3,4};
/**
* 二进制法求背包问题
* @param n
*/
public static int getMaxValue(int n){
int maxValue=Integer.MIN_VALUE;
int setCount=(int)Math.pow(2,n);
for(int i=0;i<setCount;i++){
String pattern=Integer.toBinaryString(i);
if(pattern.length()<n){
StringBuilder appendStr=new StringBuilder();
for(int j=0;j<n-pattern.length();j++){
appendStr.append("0");
}
appendStr.append(pattern);
pattern=appendStr.toString();
}
int weight=0;
int value=0;
for (int j = 0; j < n; j++) {
if (pattern.charAt(j) == '1') {
weight+=weights[j];
value+=values[j];
}
}
if(weight<=maxWeight&&value>maxValue){
maxValue=value;
}
}
return maxValue;
}
public static void main(String[] args) {
int maxValue=getMaxValue(4);
System.out.println(maxValue);
}
}