Далее передается набор, и длина строки также передается. Решение должно выводить числа из набора, которые дают минимальное количество отходов, если определенные номера из набора были удалены из бара длина. Таким образом, длина бара 10, набор включает 6,1,4, поэтому решение составляет 6 и 4, а потеря равна 0. У меня есть некоторые проблемы с условиями, чтобы отступить, хотя набор. Ive также попытался использовать "глобальную" переменную потерь, чтобы помочь в аспекте обратного отслеживания, но безрезультатно.
SetInt - это реализация, выполненная вручную, которая может добавлять, удалять, проверять, пуст ли пуст и вернуть минимальное значение из набора.
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package recback;
public class RecBack {
public static int WASTAGE = 10;
public static void main(String[] args) {
int[] nums = {6,1,4};
//Order Numbers
int barLength = 10;
//Bar length
SetInt possibleOrders = new SetInt(nums.length);
SetInt solution = new SetInt(nums.length);
//Set Declarration
for (int i = 0; i < nums.length; i++)possibleOrders.add(nums[i]);
//Populate Set
SetInt result = tryCutting(possibleOrders, solution, barLength);
result.printNumbers();
}
private static SetInt tryCutting(SetInt possibleOrders, SetInt solution, int lengthleft)
{
SetInt clonedSet = possibleOrders.cloneSet(); //initialise selection of candidates
for (int i = 0; i < possibleOrders.numberInSet(); i++) // the repeat
{
int a = clonedSet.min(); //select next candidate
if (a <= lengthleft) //if accecptable
{
solution.add(a); //record candidate
lengthleft -= a;
clonedSet.remove(a); //remove from original set
if (!clonedSet.isEmpty()) //solution not complete
{
WASTAGE +=a;
tryCutting(clonedSet, solution, lengthleft);//try recursive call
if (lengthleft > WASTAGE)//if not successfull
{
WASTAGE += a;
solution.remove(a);
}
} //solution not complete
}
} //for loop
return solution;
}
}