【例1】0/1 背包
【问题描述】
一个旅行者有一个最多能用m公斤的背包,现在有n件物品,它们的重量分别是W1,W2, ...Wn,它们的价值分别为C1,C2,...,Cn.若每种物品只有一件求旅行者能获得最大总价值。
【输入格式】
第一行:两个整数,M(背包容量,M<=200)和N(物品数量,N<=30);
第2..N+1 行:每行二个整数Wi,Ci,表示每个物品的重量和价值。
【输出格式】
仅一行,一个数,表示最大总价值。
【样例输入】
10 4
2 1
3 3
4 5
7 9
【样例输出】
12
已经列出问题,待解决。
先用递归深搜解决 java代码
import java.util.Scanner;
public class NP {
static int maxValue=0,maxWeight,n;
static int[] w,v;
static void np(int count,int mv,int mw){
if(count==n){
if(mv>maxValue) maxValue=mv;
return ;
}
np(count+1,mv,mw);
if(mw+w[count]<=maxWeight){
mw+=w[count];
mv+=v[count];
np(count+1,mv,mw);
}
return ;
}
public static void main(String argvs[]){
int i,j;
Scanner in=new Scanner(System.in);
maxWeight=in.nextInt();
n=in.nextInt();
w=new int[n];
v=new int[n];
for(i=0;i<n;i++){
w[i]=in.nextInt();
v[i]=in.nextInt();
}
np(0,0,0);
System.out.println(maxValue);
}
}