Школа программиста

Забыли пароль?
[задачи] [курсы] [олимпиады] [регистрация]
Логин:   Пароль:    
Скрыть меню
О школе
Правила
Олимпиады
Фотоальбом
Гостевая
Форум
Архив олимпиад
Архив задач
Состояние системы
Рейтинг
Курсы
Новичкам
Работа в системе
Курсы ККДП
Дистрибутивы
Статьи
Ссылки


 

Числа - 3

(Время: 1 сек. Память: 16 Мб Сложность: 48%)

Задача решается методом динамического программирования.

Заведём квадратную матрицу M размера N*N. В ячейке Mi,j будем хранить минимальный штраф за удаление всех чисел i-го по j-е не включительно (элементы матрицы, у которых i ≥ j, нам не будут нужны). Подсчитывать эти штрафы будем следующим образом: поскольку среди чисел между i-м и j-м какое-то (k-е) мы должны удалить последним, то переберём все k от i до j не включительно и посчитаем наименьший штраф за удаление всех чисел между i и j при условии, что k-е удаляется последним. Этот штраф равен сумме наименьших штрафов за удаление всех чисел c i по k (Mi,k), с k по j (Mk,j) и штрафа за последнее удаление - (ai+aj)∙ak. Тогда очевидно, что:

Mi,j = min i≤k≤j (Mi,k + Mk,j + (ai + aj)∙ak).

Несложно посчитать элементы матрицы с индексами, отличающимися на 1: так как удалять между соседними числами нечего, то Mi,i+1 = 0.

Осталось только вычислить все элементы матрицы (например, в порядке увеличения разности между индексами) и посмотреть на число M1,N, которое и будет ответом на задачу.

Кроме того, надо аккуратно обработать случай N=1. Вышеприведённый алгоритм для этого случая не подходит, но очевидно, что, так как удалять при N=1 нечего, то ответ здесь - 0.

[Обсуждение] [Все попытки] [Задача]


Красноярский краевой Дворец пионеров, (c)2006 - 2025, ИНН 246305493507, E-mail: admin@acmp.ru