算法学习——贪心算法之可拆背包

本文介绍了可拆背包问题的贪心算法解决思路。通过用户输入的物品重量和价值,每步选取单位价值最高的物品放入背包,以最大化总价值。利用二维数组存储数据,计算单位价值并排序,然后通过栈操作选择单位价值最大的物品,实现价值最大化的装包方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

算法描述

已知道n种物品和一个可容纳c重量的背包,第i种物品的重量为wi,价值为pi,装包的时候可以把物品拆开(即可只装每种物品的一部分),设计如何装包,使装包所得整体的价值最高?

算法思路

  1. 首先,我们要知道,n种物品以及他们对应的价值,都是由用户输入的

  2. 我们使用贪心算法,每一步取最大效益的物品放入背包之中(及单位价值为最高的物品 单位价值=pi/wi)

  3. 由以上思路,我们可以定义一个二维数组来接收用户输入的数值

    w[i][0] 代表了第i种物品的重量(即wi)

    w[i][1] 代表了第i种物品的价值(即pi)

    w[n][m] n范围为1~n m范围为0~1

    这里需要注意,数组下标是从0开始的,我们的n是从1开始的,空出了一个0,所以我们定义n应该定义为n+1 这里应该不难理解,n+1的话,下标就是0~n,我们需要1~n这n个位置

    定义为double[][] w = new double[n+1][2]

  4. 除了上面所说,我们还需一个Flag类来存放单位价值以及该单位价值对应的第i个物品(也就是下标)

  5. 我们将单位价值计算得出后作为Flag类成员变量content,以及

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

枫叶思念

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

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

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

打赏作者

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

抵扣说明:

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

余额充值