0-1背包问题有很多介绍,现在先不做说明,有时间补上。以下是递归的实现:
package test;
public class Package01 {
public int f(int n, int V,int[] w,int[] v)
{
if (n==0 || V==0)//当物品数量为0,或者背包容量为0时,最优解为0
{
return 0;
}
else
{
//如果当前要判断的物品重量大于背包当前所剩的容量,那么就不选择这个物品
//在这种情况的最优解为f(n-1,C)
if (w[n-1]>V) return f(n-1,V,w,v);
else
{
//如果当前待判断的物品重量wi
int tmp1 = f(n-1,V,w,v);//不选择物品i的情况下的最优解
int tmp2 = v[n-1] + f(n-1,V-w[n-1],w,v);//选择物品i的情况下的最优解
//返回选择物品i和不选择物品i中最优解大的一个
return tmp1 > tmp2?tmp1:tmp2;
}
}
}
public static void main(String args[])
{
int w[]={1,3,4,5};//物品重量数组
int v[]={2,30,44,20};//物品价值数组
Package01 pa=new Package01();
int maxvalue = pa.f(4,4,w,v);
System.out.println("Maximum Val