【无标题】C语言解决0-1背包问题超详细

【问题描述】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;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

只会C语言呢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值