【问题描述】n个商品组成集合O,每个商品有两个属性vi和pi,分别表示体积和价格。背包容量为C,找到其中背包所能装下的最大价格商品
【输入形式】商品个数:5;
背包容量:13;
对应体积:10,3,4,5,4;
相应价格:24,2,9,10,9;
【输出形式】28
【题目解析】这里为了能够更加直观理解题目,我们用v[i]l与p[i]来表示相应商品的体积与价格。为了能够获得最大价格maxP;我们需要在容积允许的条件下来拿到更多高价值的商品。那究竟拿哪些物品便是问题的核心,这里我们采用动态规划思路,自底向上的方式来解决。
【核心思路】:我们用P[i][c]来记录第i个商品在容量为c时刻的价值,利用双重循环遍历,考虑每种商品在容量为0~C下的价值为多少。在最佳选择中,对于每种商品的结果为:放进背包或者没有放进背包。需要我们对这俩中可能进行分析对比。依次遍历在容量允许的情况下,将被每个商品的放入后与不放入时对应的价格情况进行比较,最终决定是放入还是不放入背包中,选择最大值为目前的价格。
这里我们用二维数组P[i][c]来记录第i个商品在背包容量为c时背包价值。
对于i=0时,商品为零,c=0时,背包容量为零,均没有价值。则P[0][c]=0,P[i][0]=0;