背包问题的java实现

背包问题的描述:

 

有一系列的物件,他占用部分空间size,拥有价值value,给定你固定的空间cap,怎么样找到最高价值?

 

 

public class KnapsackProblem {
 static class Item {
  int size;
  int val;

  public Item(int s, int v) {
   this.size = s;
   this.val = v;
  }
 }

 static Item item[] = new Item[5];
 static int N = 5;
 static {
  item[0] = new Item(3, 4);
  item[1] = new Item(4, 5);
  item[2] = new Item(7, 10);
  item[3] = new Item(8, 11);
  item[4] = new Item(9, 13);
 }

 static int knap(int capacity) {
  int i, space, max, t;
  for (i = 0, max = 0; i < N; i++) {
   if ((space = capacity - item[i].size) >= 0) {
    if ((t = knap(space) + item[i].val) > max) {
     max = t;
    }
   }
  }
  return max;
 }

 public static void main(String[] args) {
  System.out.println(knap(17));
 }

}

该版本代码为未优化的版本,后期的版本等我阅读完奉上。

你可能感兴趣的:(java实现)