我应该如何尽可能有效地实现这个算法?贪婪的选择不起作用,所以我是否应该修改原始的动态编程解决方案来适应这个问题?如果是,怎么做?
如果有关系的话,我打算用Java写这个。
让mincost[i]
表示具有i
容量的背包所能容纳的最小值,coste[i]
表示第ith项的成本,weights[i]
表示第ith项的重量。然后,对于每个i,minval[i]
是所有j
的minval[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