当前位置: 首页 > 知识库问答 >
问题:

最小重量背包

虞滨海
2023-03-14

我应该如何尽可能有效地实现这个算法?贪婪的选择不起作用,所以我是否应该修改原始的动态编程解决方案来适应这个问题?如果是,怎么做?

如果有关系的话,我打算用Java写这个。

共有1个答案

史经业
2023-03-14

mincost[i]表示具有i容量的背包所能容纳的最小值,coste[i]表示第ith项的成本,weights[i]表示第ith项的重量。然后,对于每个i,minval[i]是所有jminval[i-weights[j]]+costes[j]的最小值,从1到条目数。

然后,答案是mincost数组中从最小权重到最大权重范围内的最小值。

final int[] weights = {1, 1, 1, 5, 13, 3}, costs = {1, 1, 1, 5, 10, 12};
final int minWeight = 15;
int maxWeight = 0;
for(final int weight: weights){
    maxWeight += weight;
}
final int[] minCost = new int[maxWeight + 1];
for(int i = 1; i <= maxWeight; i++){
    minCost[i] = Integer.MAX_VALUE;
}
for(int i = 0; i < weights.length; i++){
    for(int j = maxWeight; j >= weights[i]; j--){
        if(minCost[j - weights[i]] != Integer.MAX_VALUE){
            minCost[j] = Math.min(minCost[j], minCost[j - weights[i]] + costs[i]);
        }
    }
}
int answer = Integer.MAX_VALUE;
for(int i = minWeight; i <= maxWeight; i++){
    answer = Math.min(answer, minCost[i]);
}
System.out.println(answer);

演示

 类似资料:
  • 有没有一个算法来确定一个背包有一个准确的重量W?即。这类似于正常的0/1背包问题,其中有n个项目,每个项目的重量为w_i,值为v_i。最大化所有物品的价值,但是背包中物品的总重量需要精确的重量W! 我知道“普通的”0/1背包算法,但这也可以返回一个重量较小但价值较高的背包。我想找到最高值,但准确的W重量。 下面是我的0/1背包实现:

  • 在Linux中使用read()syscall从任何源(文件、套接字、管道)读取数据时,是否存在可以返回的最小数据量(在阻塞模式下)?或者系统调用甚至可以返回1字节? 当我想从管道中读取单个int(4或8个字节)时,我是否仍然需要检查read()的返回值以查看接收到的字节是否少于sizeof(int)字节?

  • 可以在Jetpack Compose中进行权重吗?例如,我想以这样一种方式设置它,即一个项目被加权为布局的1/3,而另一个占剩余的2/3。 在XML/ViewGroup样式中,可以使用LinearLayouts和ConstraintLayouts来实现这一点。然而,令我沮丧的是,使用Jetpack Compose似乎是不可能的。 示例: 在ConstraintLayout中,这是按如下方式完成的:

  • 如何确定流中对象的不同属性的最小值和最大值?我已经看到了关于如何得到同一变量的最小值和最大值的答案。我还看到了关于如何使用特定对象属性(例如)获取最小值或最大值的答案。但是我如何获得流中所有“x”属性的最小值和所有“y”属性的最大值呢? 假设我有一个Java

  • 本文向大家介绍小背包问题,包括了小背包问题的使用技巧和注意事项,需要的朋友参考一下 列出了物品列表,每件物品都有自己的值和重量。物品可以放在最大重量限制为W的背包中。问题是要找到小于或等于W的重量,并且值要最大化。 背包问题有两种。 0 – 1背包 小背包 对于0 – 1背包,不能将物品分成小块,对于小背包,可以将物品分成小块。 在这里,我们将讨论分数背包问题。 该算法的时间复杂度为O(n Log

  • 我正在写一个测试听力的简单应用程序,我正在用AudioTrack生成纯音。因为这是一个测试听力的应用程序,我使用非常低的音量水平来播放这些音调。 要设置卷I使用AudioTrack的setVolume(float volumeValue)方法,其中volumeValue=0-1。 我注意到我可以得到一个设备播放的最低音量约为~5.011872E-5。如果我尝试以较低的音量播放声音-例如4.4668