Эта проблема является NP-сложной?

Я пытаюсь придумать разумный алгоритм решения этой проблемы:

Допустим, у вас есть куча шаров. Каждый шар имеет как минимум один цвет, но может быть и разноцветным. На каждом шаре также есть номер. Также есть несколько коробок, каждая только одного цвета. Цель состоит в том, чтобы максимизировать сумму чисел на шарах в коробках, и единственными правилами являются:

  • чтобы поместить мяч в коробку, необходимо Также есть несколько коробок, каждая только одного цвета. Цель состоит в том, чтобы максимизировать сумму чисел на шарах в коробках, и единственными правилами являются:
    • чтобы поместить мяч в коробку, необходимо Также есть несколько коробок, каждая только одного цвета. Цель состоит в том, чтобы максимизировать сумму чисел на шарах в коробках, и единственными правилами являются:
      • чтобы поместить мяч в коробку, необходимо должен как минимум иметь цвет коробки на нем
      • вы можете положить только один мяч в каждый box.

      Например, вы можете поместить сине-зеленый шар в синий или зеленый ящик, но не в красный ящик.

      Я придумал несколько оптимизаций, которые очень помогают с точки зрения времени работы. Например, вы можете отсортировать шары в порядке убывания количества очков. Затем, по мере того, как вы переходите от наибольшего числа к наименьшему, если мяч имеет только один цвет и нет других шаров с более высокой точкой, которые содержат этот цвет, вы можете поместить его в это поле (и, таким образом, удалить этот квадрат и этот шар из оставшиеся комбинации).

      Мне просто любопытно, есть ли какой-то динамический алгоритм для этого типа задач, или это просто замаскированная задача коммивояжера. Помогло бы я, если бы я знал, что существует не более X цветов? Любая помощь приветствуется. Спасибо!


      Edit - вот простой пример:

      Balls: ChangeType принимает параметр объекта? Класс Convert существует с .NET 1.0. Интерфейс IConvertible также существует с этого времени. Метод Convert.ChangeType работает только с объектами типов, реализующих ...

      Класс Convert существует с .NET 1.0. Интерфейс IConvertible также существует с этого времени.

      Метод Convert.ChangeType только работает с объектами типов, реализующих IConvertible ] (на самом деле, если я не ошибаюсь, все методы преобразования, предоставляемые классом Convert , являются такими). Так почему же тип параметра объект ?

      Другими словами, вместо этого:

      public object ChangeType(object value, Type conversionType);
      

      Почему подпись не такая?

      public object ChangeType(IConvertible value, Type conversionType);
      

      Мне просто кажется странным.

7
задан Dan Tao 3 October 2010 в 00:03
поделиться