Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
__Динамическое программирование_специалитет.doc
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
2.74 Mб
Скачать

Сборник заданий, задач, примеров, упражнений и т.Д.

Задача 1. Взрывоопасность. При переработке радиоактивных материалов образуются отходы двух видов — особо опасные (тип A) и неопасные (тип B). Для их хранения используются одинаковые контейнеры. После помещения отходов в контейнеры, последние укладываются вертикальной стопкой. Стопка считается взрывоопасной, если в ней подряд идет более двух контейнеров типа A. Для заданного количества контейнеров N определить число безопасных стопок.

Формат входных данных Одно число 0 < N < 31.

Формат выходных данных Одно число – количество безопасных вариантов формирования стопки.

Задача 2. К-ичные числа. Требуется вычислить количество N-значных чисел в системе счисления с основанием K, таких что их запись не содержит двух подряд идущих нулей.

Ограничения: 2 <= K <= 10, N + K <= 18.

Формат входных данных Числа N и K в десятичной записи, разделенные пробелом или переводом строки.

Формат выходных данных Искомое число в десятичной записи.

Задача 3. Локомотивы. N локомотивов, имеющих номера от 1 до N и установленных на железнодорожную колею, начинают двигаться в одну сторону, причем локомотив номер k изначально движется со скоростью k км/ч. Если локомотив, движущийся с большей скоростью, нагоняет более медленный локомотив, дальше они движутся один за другим со скоростью впереди идущего локомотива. Очевидно, через некоторое время после начала движения локомотивы разобьются на несколько групп, движущихся с разной скоростью. Написать программу, определяющую, сколько начальных расстановок s из N! Возможных дадут в результате p групп движущихся локомотивов.

Формат входных данных Два числа – 0 < N < 17 и 0 < p < N + 1.

Формат выходных данных Одно число – s.

Задача 4. Банкомат. Рассмотрим следующую задачу. В обороте находятся банкноты k различных номиналов: a1, a2, ..., ak рублей. Банкомат должен выдать сумму в N рублей при помощи минимального количества банкнот или сообщить, что запрашиваемую сумму выдать нельзя. Будем считать, что запасы банкнот каждого номинала неограничены.

Задача 5. Расстановка королей. Дана шахматная доска n×m и число k. Нужно посчитать количество способов размещения на этой доске k королей так, чтобы они не били друг друга.

Задача 6. Расстановка коней. На этот раз на шахматной доске n×n нужно подсчитать количество способов расставить k коней так, чтобы они не били друг друга.

Задача 7. Максимальная подпоследовательность. Дана числовая последовательность, требуется найти длину наибольшей возрастающей подпоследовательности.

Задача 8. В условиях двухпроцессорной задачи мастера требуется построить оптимальное расписание обслуживания заявок 1 – 6 со следующими характеристиками: а(1) = 4, τ(1) = 1; а(2) = 7, τ(2) = 2; а(3) = 8, τ(3) = 3; а(4) = 4, τ(4) = 3; а(5) = 10, τ(5) = 5; а(6) = 17, τ(6) = 4.

Задача 9. Записать рекуррентные соотношения динамического программирования для решения трехпроцессорной задачи мастера.

Задача 10. Обобщенная на случай нелинейных функций индивидуального штрафа однопроцессорная задача мастера определяется следующими исходными данными: обслуживанию подлежат заявки 1, 2, 3, 4; продолжительности обслуживания заявок: τ(1) = 4, τ(2) = 1, τ(3) = 3, τ(4) = 1; функции индивидуального штрафа: ϕ1(t) = 4t2, ϕ2(t) = 3t, ϕ3(t) = 2t2 + t, ϕ4(t) = t2 + 2t. Требуется найти оптимальное расписание обслуживания.

Задача 11. Задача однопроцессорного обслуживания множества заявок с минимаксным критерием определяется следующими исходными данными: обслуживанию подлежат заявки 1, 2, 3, 4, 5; продолжительности обслуживания заявок: τ(1) = 3, τ(2) = 2, τ(3) = 4, τ(4) = 1, τ(5) = 2; функции индивидуального штрафа: ϕ1(t) = 4t2, ϕ2(t) = 3t, ϕ3 (t) = t2 + t, ϕ4(t) = t2 +2t, ϕ5 (t) = t3 + 1. Требуется найти оптимальное расписание обслуживания.

Задача 12. Задача однопроцессорного обслуживания множества заявок при наличии директивных сроков определяется следующими исходными данными: τ(1) = 4, d(1) = 5; τ(2) = 3, d(2) = 6; τ(3) = = 5; d(3) = 9; τ(4) = 2, d(4) = 9; τ(5) = 3; d(5) = 10; τ(6) = 4; d(6) = 12; τ(7) = 4; d(7) = 13; τ(8) = 4, d(8) = 15. Найти расписание, обеспечивающее выполнение в срок максимально возможного числа заявок.

Задача 13. Записать соотношения динамического программирования для решения задачи двухпроцессорного обслуживания множества заявок при наличии директивных сроков. В этой задаче для каждой заявки i, i = 1,...,n, считаются заданными продолжительность обслуживания τ(i) и директивный срок d(i); требуется построить расписание, минимизирующее число нарушений пред-писанных заявкам директивных сроков.

Задача 14. Каноническая задача однопроцессорного обслуживания потока из шести заявок характеризуется следующими данными: t(1) = 0, τ(1) = 3, а(1) = 4; t(2) = 0, τ(2) = 4, а(2) = 7; t(3) = 1, τ(3) = = 1, а(3) = 8; t(4) = 3, τ(4) = 2, а(4) = 7; t(5) = 5, τ(5) = 3, а(5) = 3; t(6) = 5, τ(6) = 2, а(6) = 7. Методом динамического программирования (обратный счет) требуется определить оптимальное расписание обслуживания.

Задача 15. Каноническая задача однопроцессорного обслуживания потока из шести заявок характеризуется следующими данными: t(1) = 0, τ(1) = 2, а(1) = 3; t(2) = 1, τ(2) = 4, а(2) = 7; t(3) = 1, τ(3) = = 1, а(3) = 8; t(4) = 3, τ(4) = 2, а(4) = 7; t(5) = 5, τ(5) = 3, а(5) = 3; t(6) = 5, τ(6) = 2, а(6) = 7. Методом динамического программирования (прямой счет) требуется определить оптимальное рас-писание обслуживания.

Задача 16. В задаче однопроцессорного обслуживания потока заявок с линейными функциями индивидуальных штрафов и директивными сроками в совокупности расписаний, обеспечивающих соблюдение максимального числа сроков, найти последовательность обслуживания с минимальным значением суммарного штрафа по заявкам. Характеристики заявок следующие: t(1) = 0, τ(1) = 3, ϕ1(t) = t, d(1) = 5; t(2) = 2, τ(2) = 3, ϕ2(t) = 4t, d(2) = 5; t(3) = 3, τ(3) = 4, ϕ3(t) = 2t, d(3) =7; t(4) = 4, τ(4) = 3, ϕ4(t) = 3t, d(4) = 9; t(5) = 6, τ(5) = 1, ϕ5(t) = 4t, d(5) = 7.

Задача 17. Записать рекуррентные соотношения динамического программирования для задачи распределения заявок потока R = = {1, 2,..., n} между двумя идентичными параллельными процессорами. Считается, что каждый процессор обслуживает направляемые ему заявки в порядке возрастания их номеров. Каждая заявка i характеризуется тремя целочисленными параметра-ми: t(i) − момент поступления в систему обслуживания (0 = = t(1) ≤ t(2) ≤ … ≤ t(n – 1) ≤ t(n)); τ(i) − требуемая продолжительность обслуживания любым из процессоров (τ(i) > 0); a(i) − штраф за единицу времени пребывания в системе обслуживания. Минимизируемым критерием является суммарный штраф по всем заявкам.