说明:这里我们先逐步讨论背包问题,总的来说背包分为 与利润无关的 与利润有关的 完全背包
部分背包(商品可以拆解开,性价比),这里先讲解与利润无关的 简单需要理解
一.背包问题1 (有件数和重量限制)
例题:有9件商品在其中选出3件 使得重量与500之差的绝对值最小 数据由键盘输入
思路:枚举选取物品的编号,因为有具体的件数 循环枚举得到解,在判断是否符合
public class p01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("输入九件商品的重量 :");
//555 666 444 556 999 111 888 222 333
int [] w =new int[9];
int total =0;
int besttotal=888; //定义一个最好的total 比想要的值大,后面求得值要比这个小
int besti=0,bestj=0,bestk=0;
for(int i=0;i<w.length;i++) {
w[i]=scanner.nextInt();
}
//选三件商品 第一件从w[0]开始 后面第二件从i+1每件不能重复
for(int i=0;i<7;i++) { //保证后面还有两件
for(int j=i+1;j<8;j++) {
for(int k=j+1;k<9;k++) {
total=Math.abs(500-w[i]-w[j]-w[k]);
if( total < besttotal) {
//更新所选的物品和总重量
besttotal=total;
besti=i;
bestj=j;
bestk=k;
}
}
}
}
//下标从零开始,所以都要加1
System.out.println("所选的