算法描述
已知道n种物品和一个可容纳c重量的背包,第i种物品的重量为wi,价值为pi,装包的时候可以把物品拆开(即可只装每种物品的一部分),设计如何装包,使装包所得整体的价值最高?
算法思路
-
首先,我们要知道,n种物品以及他们对应的价值,都是由用户输入的
-
我们使用贪心算法,每一步取最大效益的物品放入背包之中(及单位价值为最高的物品 单位价值=pi/wi)
-
由以上思路,我们可以定义一个二维数组来接收用户输入的数值
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]
-
除了上面所说,我们还需一个
Flag类
来存放单位价值以及该单位价值对应的第i个物品(也就是下标) -
我们将单位价值计算得出后作为
Flag类
的成员变量content
,以及