好的,所以,对于那些不熟悉0-1背包问题的人,我必须写一篇文章来计算10个物品的重量和相应的值,并找出哪些物品应该放在一个能装85磅的背包中,以使背包的最大值。
我经常遇到编译器错误,老实说,我真的很不擅长调试。
代码:
// The "Knapsack" class.
public class Knapsack
{
public static void main (String[] args)
{ int n;
int nmax = 10;
int wmax = 85;
int w;
int addVal;
int itemArray = new int [2][nmax];
int solArray = new int [nmax][wmax];
itemArray = {{10, 63, 84, 81, 33, 11, 67, 10, 65, 81}, { 9, 19, 5, 31, 48, 17, 46, 80, 38, 55}};
//This section of code fills the first row of the Solution Array
while(w <= wmax){
if (itemArray [0][0] < w){
solArray[0][w] = itemArray[0][1];
}
else solArray[0][w] = 0;
}
for (n = 1; n <= nmax-1; n++){
for(w = 1; w <= wmax-1; w++){
//checks to see if the item being looked at weighs more than the subproblem can carry
if (itemArray[0][n] > w){
solArray[n][w] = solArray[n-1][w];
}
//adds together the values of the previous subproblem and the current iteration of n
//and checks if it is of greater value than the previous row
addVal = solArray[n-1][w-itemArray[0][n]] + itemArray[1][n];
if (addVal > solArray[n-1][w]){
solArray[n][w] = addVal;
}
//if only the current item can be fit in the knapsack, checks if the item is more valuable than the value in the row above
else if (w >= itemArray[0][n] && solArray[n-1][w] < itemArray[1][n])
{solArray[n][w] = itemArray[1][n];}
else solArray[n][w] = solArray[n-1][w];
}
}
n = nmax-1;
w = wmax-1;
int includeArray = new int[i];
int i = 0;
//populates a 1-dimensional array with the numbers of the items filling the knapsack in the optimal solution
while (n <= 0){
if ((solArray[n][w] != solArray[n-1][w]) && (solArray [n-1][w] != 0)){
includeArray[i] = n;
w = w - itemArray[0][n];
i++;
}
n--;
}
includeArray.length = i;
//print out solution array
for (n = 0; n <= nmax; n++){
for (w = 0; w <=wmax; w++){
System.out.println(solArray[n][w]);
}
}
} // main method
} // Knapsack class
P、 S.Noooooo,论坛把我所有的漂亮缩进都弄乱了!
8条答案
按热度按时间lrl1mhuk1#
uqjltbpv2#
知道语法是编程的先决条件。这不是调试。无论如何,我会让您开始:用于分配数组变量的语法只能用于
initialize
数组:hec6srdp3#
啊,谢谢,我对我的数组和Java有点生疏了……因为某种原因,我无法理解它的语法。
nnvyjq4y4#
2guxujil5#
qxgroojn6#
ndh0cuux7#
背包0-1&rosettacode&qbasic qb64&WE
经典背包问题有很多解决方法
内容:http://rosettacode.org/wiki/Knapsack_problem
长期阅读:rosettacode.org/wiki/背包_problem/0-1
我的最新程序综合了0和1的所有密码
添加一个额外的寄存器,密码中左侧保留0
比较次数从N减少!到2^N
例如N=5N=120>>2^N=32
自动指定随机值原点
得到了数值的数量、质量和积分
一般而言:数量和质量的积分
而且有可能分裂,只有任何人都不会理解
程序将结果写入qb64目录
主要的事情是非常简短和清楚的,甚至所有人
结果手动减少:
ru9i0ody8#
请在[code]标签中附上您发布的代码(请参阅如何提问)。
这使我们的Maven更容易阅读和理解。不这样做会给主持人带来额外的工作,从而浪费资源,否则就无法回答成员的问题。
请以后使用[代码]标签。
主持人