我被挑战以递归方式解决以下问题,但我仍然不能。
问题:需要打包以下套装中的所有物品
int[] items = new int[] {4, 4, 2, 3};
放入以下框中
int[] boxes = new int[] {5, 8};
目前,在算法结束时,我有
Item index: 2
Box index: 1
Items: 0, 0, 0, 3,
Boxes: 1, 2,
-------------------------------------------------
It is possible to distribute defined set of items in given boxes.
这是不正确的,因为有一个项目 3 并且有两个剩余容量为 1 和 2 的盒子。我从“||”右侧得到的最终肯定结果 表达。
有人可以指出错误的代码或推荐正确的解决方案吗?谢谢!
我的Java代码如下:
public class Boxes
{
public static void main(String[] args)
{
int[] items = new int[] {4, 4, 2, 3};
int[] boxes = new int[] {5, 8};
System.out.println( String.format("It is %spossible to distribute defined set of items in given boxes.", IsFit(items, boxes, 0, 0) ? "" : "NOT " ) );
}
private static boolean IsFit(int[] items, int[] boxes, int boxIndex, int itemIndex)
{
if (boxIndex == boxes.length)
return false;
if (itemIndex == items.length)
return true;
boolean result =
IsFit(items, boxes, boxIndex + 1, itemIndex)
||
IsFit(items, boxes, boxIndex, itemIndex + 1)
;
if (result)
{
int storedValue = items[itemIndex];
if (boxes[boxIndex] >= storedValue)
{
boxes[boxIndex] -= storedValue;
items[itemIndex] = 0;
/*
System.out.println( String.format("Item index: %d", itemIndex) );
System.out.println( String.format("Box index: %d", boxIndex) );
System.out.print("Items: ");
for (int i : items)
System.out.print( String.format("%s, ", i) );
System.out.println();
System.out.print("Boxes: ");
for (int b : boxes)
System.out.print( String.format("%s, ", b) );
System.out.println();
System.out.println("-------------------------------------------------");
*/
result = IsFit(items, boxes, boxIndex, itemIndex + 1);
items[itemIndex] = storedValue;
boxes[boxIndex] += storedValue;
}
}
return result;
}
}