Самородки кода
Это гипотетическая ситуация, когда наступает вечер пятницы, и вы пригласили обычных приятелей по гольфу принять участие в вашем любимом хобби: играть в гольф. Тем не менее, так как это такая мозговитая задача, вам нужно подобрать немного пищи для группы, чтобы вы могли как можно больше играть в гольф на своем коде.
Теперь, любимая закуска для всех - куриные наггетсы, но есть проблема: их нет ни одной упаковки, которая бы отвечала потребностям каждого. Итак, поскольку вы уже в настроении для игры в гольф, вы решили создать программу, которая точно определит, какие пакеты вы должны купить, чтобы иметь возможность удовлетворить потребности каждого Nugget.
Размеры упаковок куриных самородков повсюду, и в зависимости от того, где вы живете, стандартные размеры тоже меняются. Однако в ближайшем [месте, где обслуживаются самородки], имеются следующие размеры пакетов самородков:
4, 6, 9, 10, 20, 40
Теперь вы можете заметить, что вы не можете заказать определенные комбинации самородков. Например, 11самородки невозможны, так как не существует комбинации, которая в 11точности равна . Тем не менее, вы можете сделать 43, получив 1 пачку 20, 1 пачку 10, 1 пачку 9и 1 пачку 4,
20 + 10 + 9 + 4 = 43 (597)
где 597каждый член возводится в квадрат и складывается вместе (подсказка: оптимальное решение имеет это как наибольшее значение) . Конечно, есть и другие способы изготовления 43, но, как вы знаете, чем больше самородков в упаковке, тем дешевле они становятся за самородок. Таким образом, вы хотите в идеале купить наименьшее количество упаковок и в больших количествах, чтобы минимизировать ваши затраты.
Задание
Вы должны создать программу или функцию, которая принимает список целых чисел, соответствующих требованиям каждого человека. Затем вы должны рассчитать и распечатать наиболее экономичный α- заказ на покупку куриных наггетсов. Наиболее экономически выгодным α- порядком является комбинация, при которой сумма квадратов каждого количества является наибольшей. Если нет абсолютно никакого способа , чтобы купить самородки отлично, вы должны напечатать на falsy значение , например 0, False, Impossible!или все , что доступно на вашем языке.
Пример ввода / вывода:
[2 7 12 4 15 3] => [20 10 9 4]
1, 1, 2, 1 => False
6 5 5 5 5 5 9 => 40
[6, 4, 9] => 9 10
1 => 0
199 => 40, 40, 40, 40, 20, 10, 9
2 => Impossible!
Вот список идеальных решений для первых 400. Обратите внимание, что они не отформатированы так, как я ожидал, ваши будут tupleв форме (N lots of M).
правила
- Нет стандартных лазеек.
- Не использовать встроенные функции, которые выполняют все или большую часть задачи, например,
FrobeniusSolveв Mathematica.
α - Чтобы прояснить это на примере, вы также могли бы сделать 43, выполнив 4 + 6 + 6 + 9 + 9 + 9 = 43 (319), но это не было бы оптимальным, и, следовательно, неправильный вывод, так как сумма квадратов меньше, чем комбинация, которую я отметил во введении. По сути, более высокая сумма квадратов = более низкая стоимость = наиболее экономически эффективны.