java 背包问题

来源:互联网 发布:金山软件西山居 编辑:程序博客网 时间:2024/04/29 11:16

(背包问题)一个小偷抢劫了一个保险箱,发现里面装有N种大小和价值不同的东西,但只有一个容量为M的小背包来运走这些东西。背包问题就是让小偷选择放在背包中的物品,使得能带走的东西的总价值最大。 

:   物品  A  B  C  D  E

      大小  3  4  7  8  9

      价值  4  5 10 11 13

      背包大小 17

      输出最大价值:24

分析:需先遍历所有符合条件的情况,记录最大总价值,可用递归回溯实现遍历。

java程序源码:

public class Test{

private static int[] size={3,4,7,8,9};

private static int[] value={4,5,10,11,13};

public static int getMax(int cap)

{

int i,space,max=0,t;

for(i=0;i<5;i++)

{

if((space=cap-size[i])>=0)

if((t=getMax(space)+value[i])>max)

max=t;

}

return max;

}

    public static void main(String[] args) {

     System.out.println(getMax(17));

}

}

思考:如果该题中保险箱中的东西数目是有限的,那又该怎么做呢?如果再加上各种东西的重量以及小偷能带走的最大重量,这又该怎么做呢?