у меня есть фиксированный список весов:Экспресс целого числа в виде суммы некоторых других фиксированных целых
int[] weights = new int[] { 10, 15, 20 };
и цель:
int target = 28;
Я ищу алгоритм, чтобы выразить target
, как сумма элементов из weights
(с допускаемыми повторами), так что target
либо согласован, либо превышен, достигается максимально возможное совпадение с target
, и в этом случае Номер используемых весов минимизирован.
Так что с выше входом я хотел либо 10 20
или 15 15
быть возвращены, так как 30
так близко, как мы можем получить, и вариантов решений 30
, эти два лучше, чем 10 10 10
.
С target
из 39
, выход должен быть 20 20
, а не, скажем, 15 15 10
или 10 10 10 10
.
С target
от 14
выход должен быть 15
.
Есть ли хороший подход здесь, кроме обычных петлей foreach? Я думал о том, чтобы получить наибольшее значение, доступное в массиве, и проверить, является ли цель отрицательной, если нет, то давайте перейдем к следующему значению.
Это не домашняя :)
Я не понимаю _ «Если бы мой вес был бы равен 39, результат был бы равен 20 и 20.» _ В массиве всего 20. –
Итак, вы можете выбрать одно и то же значение несколько раз из массива и хотите, чтобы сумма выбранных значений была больше или равна целевому значению. Предположительно, вы хотите получить минимально возможную сумму и * также *, чтобы свести к минимуму количество выбранных значений? Например. 10, 10, 10 является худшим выбором, когда цель = 28? –
Я не понимаю '' В приведенном выше примере выбор должен быть 20 и 10 ". Почему 10? –