Во всех задачах этого листка необходимо реализовать перебор с возвратом. Общая схема перебора с возратом такая:
def Перебор(Ситуация): if Ситуация конечная: Завершающая обработка else: for Действие in Множество всех возможных действий: Применить Действие к Ситуация Перебор(Ситуация) откатить Действие назад
Грузоподъемность машины \(M\) килограмм. Есть \(n\) ящиков с грузами, масса \(i\)-го ящика равна \(m_i\). Определите, какую наибольшую массу грузов можно увезти на автомашине.
Программа получает на вход действительное число \(M\), затем количество ящиков \(n\le 20\), затем \(n\) действительных чисел: массы ящиков.
Программа должна вывести единственное число: максимальную массу, которую можно увезти на машине.
Ввод | Вывод |
---|---|
10 |
9.0 |
1073.15936137 |
1064.0876642465998 |
Решите задачу A в ограничениях \(n\le 23\). Используйте следующие оптимизации:
На плоскости даны \(n\) точек. Соедините их замкнутой ломаной линией минимальной длины.
Программа получает на вход число \(n\le10\). Далее идет \(n\) пар действительных чисел: координаты точек.
Выведите одно действительное число: минимальную длину замкнутой ломаной, проходящей через все эти точки. Ответ выводите с точностью в 15 знаков.
Ввод | Вывод |
---|---|
4 |
4.82842712474619 |
Решите задачу C в ограничениях \(n\le11\). Используйте следующую оптимизацию:
Решите задачу C в ограничениях \(n\le12\). Используйте следующую оптимизацию:
Дано выражение: \[a_1 ? a_2 ? ... ? a_n = S\]
Посчитайте, сколькими способами в этом выражении можно заменить вопросительные знаки на знаки операций сложения и умножения так, чтобы выполнялось равенство.
Программа получает на вход число n и S. Далее идет n натуральных чисел ai.
Выведите одно число — количество расстановок знаков сложения и умножения, дающих верное равенство.
Ввод | Вывод |
---|---|
2 4 |
2 |