Я пытаюсь придумать разумный алгоритм решения этой проблемы:
Допустим, у вас есть куча шаров. Каждый шар имеет как минимум один цвет, но может быть и разноцветным. На каждом шаре также есть номер. Также есть несколько коробок, каждая только одного цвета. Цель состоит в том, чтобы максимизировать сумму чисел на шарах в коробках, и единственными правилами являются:
Например, вы можете поместить сине-зеленый шар в синий или зеленый ящик, но не в красный ящик.
Я придумал несколько оптимизаций, которые очень помогают с точки зрения времени работы. Например, вы можете отсортировать шары в порядке убывания количества очков. Затем, по мере того, как вы переходите от наибольшего числа к наименьшему, если мяч имеет только один цвет и нет других шаров с более высокой точкой, которые содержат этот цвет, вы можете поместить его в это поле (и, таким образом, удалить этот квадрат и этот шар из оставшиеся комбинации).
Мне просто любопытно, есть ли какой-то динамический алгоритм для этого типа задач, или это просто замаскированная задача коммивояжера. Помогло бы я, если бы я знал, что существует не более 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);
Мне просто кажется странным.