- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
用户将输入重量阈值、物体数量以及 3 个物体的重量和成本。输出应该是背包图,并且应该显示最优解。
重量应该最大,成本应该最小。
示例输出:
w=60
n=3
w = 10
w2 = 35
w3 = 30
c=8
c1=4
c2=7
output:
A 10 8
B 35 4
C 30 7
AB 45 12
AC 40 15
BC 65 11
ABC 75 19
OPTIMAL SOLUTION: AB with total weight of 45 and total cost of 12.
我的问题是我的最佳解决方案是错误的。它输出最佳解决方案:A,总重量为 40,总成本为 15。
我应该如何解决它?
谢谢!
import java.util.*;
public class KnapsackBruteForce {
static int numObject;
static int weightThreshold = 0;
static String variables[] = new String[100];
static double numCombination;
static KnapsackBruteForce knapsack = new KnapsackBruteForce();
static Scanner input = new Scanner(System.in);
public static void main(String args[]){
System.out.print("Enter weight threshold: ");
weightThreshold = input.nextInt();
System.out.print("Enter number of objects: ");
numObject = input.nextInt();
int weightObject[] = new int[numObject+1];
int costObject[] = new int[numObject+1];
System.out.println("Enter variables: ");
for(int i=0;i<numObject;i++){
variables[i] = input.next();
}
for(int i=0;i<numObject;i++){
System.out.print("Enter weight of object "+variables[i]+": ");
weightObject[i] = input.nextInt();
}
for(int i=0;i<numObject;i++){
System.out.print("Enter cost of object "+variables[i]+": ");
costObject[i] = input.nextInt();
}
knapsack.possibleCombinations(variables, weightObject, costObject, weightThreshold, numObject);
}
public void possibleCombinations(String variables[], int weightObject[], int costObject[], int weightThreshold, int numObject){
int weight = 0;
int cost = 0;
int optWeight = 0;
int optCost = 0;
String optVar = "";
String newVar = "";
for (int i = 1; i < (1 << numObject); i++) {
String newVariable = Integer.toBinaryString(i);
for (int j = newVariable.length() - 1, k = numObject - 1; j >= 0; j--, k--) {
if (newVariable.charAt(j) == '1') {
newVar = variables[k];
weight += weightObject[k];
cost += costObject[k];
System.out.print(newVar);
}
}
System.out.println("\t" + weight + "\t" + cost);
if (weight <= weightThreshold) {
if (optWeight == 0 && optCost == 0) {
optWeight = weight;
optCost = cost;
} else if (optWeight <= weight) {
if (optCost <= cost) {
optVar = newVar;
optWeight = weight;
optCost = cost;
}
}
}
weight = 0;
cost = 0;
}
System.out.println("OPTIMAL SOLUTION: " + optVar + " with total weight of " + optWeight + " and total cost of " + optCost + ".");
}
}
最佳答案
你的逻辑有一个优先级问题,如果你的解决方案中有两个最好的45 12和50 13,你会选择哪一个?
由于这种歧义,在下面的部分中您无法选择:
else if (optWeight <= weight) {
if (optCost <= cost) {
optVar = newVar;
optWeight = weight;
optCost = cost;
}
}
即使在你的逻辑中,你也应该采取较低的成本而不是较高的 optCost <= cost
.
如果你清除了这个歧义,你应该关注的部分就是我提到的部分。
还可以使用日志记录或至少将一些信息打印到控制台来查看代码的行为方式。
关于java - 背包最优解(暴力),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36086370/
我正在尝试在r中编写代码,以便找到单变量正态分布的最大似然(而不是对数似然)值。我知道还有其他方法,但是我需要深入了解数值优化才能进行进一步的工作。当我调用'optim'函数时,它似乎根本不会进行迭代
最近我一直在用 php + mysql 做一个相当大的项目。现在我担心我的 mysql。我应该怎么做才能使我的 mysql 尽可能优化?把你知道的都说出来,我将非常感激。 第二个问题,我在每次加载页面
我不太了解 InitializeCriticalSectionAndSpinCount 的文档: http://msdn.microsoft.com/en-us/library/windows/des
我们公司有几种不同的获取潜在客户的方式,以及我们处理的几种类型的潜在客户。每种类型的潜在客户之间只有微小的差异,并且大部分信息与一种或多种其他潜在客户类型共享或相关。我和我的团队正在尝试使用 Solr
ϵ-贪婪策略 我知道 Q-learning 算法应该尝试在探索和利用之间取得平衡。由于我是该领域的初学者,因此我想实现一个简单版本的探索/利用行为。最佳 epsilon 值 我的实现使用 ϵ 贪婪策略
我是一名优秀的程序员,十分优秀!