Во всех задачах этого листка необходимо реализовать перебор с возвратом. Общая схема перебора с возратом такая:
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 | 
В Волшебной стране используются монетки достоинством A1, A2,…, AM. Волшебный человечек пришел в магазин и обнаружил, что у него есть ровно по две монетки каждого достоинства. Ему нужно заплатить сумму N. Напишите программу, определяющую, сможет ли он расплатиться без сдачи.
Сначала вводится число N (1≤N≤109), затем —число M (1≤M≤10) и далее M попарно различных чисел A1, A2,…, AM (1≤Ai≤109).
Выведите сначала K — количество монет, которое придется отдать Волшебному человечку, если он сможет заплатить указанную сумму без сдачи. Далее выведите K чисел, задающих достоинства монет. Если решений несколько, выведите вариант, в котором Волшебный человек отдаст наименьшее возможное количество монет. Если таких вариантов несколько, выведите любой из них.
Если без сдачи не обойтись, то выведите одно число 0. Если же у Волшебного человечка не хватит денег, чтобы заплатить указанную сумму, выведите одно число –1 (минус один).
| Ввод | Вывод | 
|---|---|
| 5 2 | 3 | 
| 7 2 | -1 | 
| 5 2 | 0 | 
Головоломка “игра в пятнашки” состоит из 15 квадратиков, уложенные в рамку размером 4×4, при этом одно место остается незанятым. За один ход можно передвинуть один квадратик, соседний с незанятым местом, в незанятое место. Цель головоломки: упорядочить квадратики до такого положения:
| 1 | 2 | 3 | 4 | 
| 5 | 6 | 7 | 8 | 
| 9 | 10 | 11 | 12 | 
| 13 | 14 | 15 | 
Вам дана некоторое начальное положение головоломки. Известно, что ее можно решить не более, чем за 20 ходов. Найдите решение этой головоломки.
Программа получает на вход 4 строки, содержащие по 4 числа: значения, записанные на квадратиках в начальном расположение. Число 0 соответствует пустой клетке.
Программа должна вывести последовательность перемещений, решающих головоломку
в виде строки из букв L, R, U,
D решающую головоломку, где буква L соответствует движению
квадратика с числом влево, R — вправо, U — вверх,
D — вниз.
| Ввод | Вывод | 
|---|---|
| 1 2 3 4 | DLU | 
В условиях предыдущей задачи найдите и выведите кратчайшее решение (т.е. решение содержащее наименьшее число перемещений). Гарантируется, что головоломку всегда можно решить не более чем за 20 перемещений.
Премьер-министр некоторого государства хочет составить новый кабинет министров. К составу нового кабинета есть следующие пожелания:
На рассмотрение Премьер-министра поступило N кандидатур. Определите, сколько и каких людей должны получить министерские посты, с учетом пожеланий.
Cначала вводится число N (натуральное, не превышает 10) — количество кандидатов в списке, затем вводится число K (натуральное, не превышает 20) – общее количество областей, в которых министры должны разбираться. Затем идет N строк следующего формата: в начале строки вводится число Pi (натуральное, не превышает K) – количество областей, в которых разбирается i-й кандидат, потом вводятся номера этих областей (натуральные числа, не превышают K).
Выведите количество министров, которое планируется назначить, исходя из требований задачи, затем перечислите номера подходящих кандидатов, в порядке возрастания. Если решений несколько, то выберите из них то, в котором участвуют кандидаты, идущие раньше по списку (то есть полученный список должен быть минимальным в лексикографическом порядке из всех возможных списков минимальной длины). Гарантируется, что решение существует (то есть в каждой области разбирается хотя бы один кандидат).
| Ввод | Вывод | 
|---|---|
| 3 2 | 1 | 
| 4 3 | 2 |