蓝桥杯完全背包java,蓝桥杯——说好的进阶之完全背包问题

有N种物品和一个载重量为W的背包,每种物品都有无限件可用。第i种物品的重量是w,价值是p。将哪些物品装入背包可使这些物品的重量总和不超过背包总重量,且价值总和最大。(对比01背包问题,取或不取与无限件)

static int W=10;

static int[] w_arr = new int[]{3,2,5,1,6,4};

static int[] p_arr = new int[]{6,5,10,2,16,8};

static int[][] v;

public static void main(String[] args) {

// TODO Auto-generated method stub

v=new int[w_arr.length+1][W+1];

//法一

cal();

//改进

k();

}

static void k()

{

int[] b=new int[W+1];

for(int i=0;i

{

for(int j=w_arr[i];j<=W;j++) //第 i 件取入影响最优解 正向以充分考虑

{

b[j]=Math.max(b[j], b[j-w_arr[i]]+p_arr[i]);

}

}

for(int i:b)

{

System.out.print(i+" ");

}

System.out.println();

System.out.println(b[W]);

}

static void cal()

{

for(int i=1;i

{

for(int j=1;j

{

for(int k=0;k<=j/w_arr[i-1];k++)

{

v[i][j]=Math.max(v[i-1][j],v[i-1][j-k*w_arr[i-1]]+k*p_arr[i-1]);

}

}

}

for(int i[]:v)

{

for(int j:i)

{

System.out.print(j+" ");

}

System.out.println();

}

System.out.println(v[w_arr.length][W]);

}

原文:http://blog.csdn.net/hymanxq/article/details/25509327

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值