Во всех задачах этого листка необходимо реализовать перебор с возвратом. Общая схема перебора с возратом такая:
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 |