Codeforces Round 107 (Div. 1) |
---|
Закончено |
На прилавках магазинов появилась долгожданная игра The Colder Scrools V: XXXvodsk. Игра оказалась дьявольски сложна, и большинство студентов не могут пройти последнюю миссию («Мы не ходим в XXXводск...»), в связи с чем зимняя сессия оказалась под угрозой. Ректор уже подумывал о переносе сессии на апрель (ему и самому хотелось пройти эту миссию), когда на пороге его кабинета возник незнакомец. «Здравствуйте. Меня зовут Петрович, и я решаю любые проблемы», — сказал он.
Теперь они уже сидят вместе и все равно не могут пройти эту миссию. Ведь чтобы одолеть финального босса, требуется показать все свое мастерство в искусстве управления буквами. Нужно быть настоящими волшебниками, а уж что говорить, когда волшебники начинают соревноваться...
Но, давайте более формально: дана строка и набор целых чисел ai. Разрешается выбрать любую подстроку, являющуюся палиндромом, и удалить ее. При этом мы получаем количество очков равное ak, где k — длина удаляемого палиндрома. Для некоторых k ak = -1, что означает, что удалять подстроки-палиндромы такой длины запрещено. После удаления подстроки оставшаяся часть «сдвигается», то есть строка ни в какой момент времени не содержит пропусков. Этот процесс повторяется, пока строка содержит хотя бы одну подстроку-палиндром, которую можно удалить. Все полученные очки суммируются.
Определите, какое максимальное количество очков можно получить.
«Эх», — сказал, вставая из-за стола, Петрович, — «когда-то я тоже любил удалять палиндромы, как и вы, но потом мне прострелили колено».
Первая строка содержит целое число l (1 ≤ l ≤ 150) — длину строки .
Вторая строка содержит ровно l целых чисел ak ( - 1 ≤ ak ≤ 105) — бонусы за удаления.
Третья строка содержит ровно l строчных букв латинского алфавита — исходную строку, из которой нужно удалять палиндромы. Никаких других символов (кроме символа перевода строки в конце) данная строка не содержит.
Выведите одно целое число — максимальное количество очков, которое можно получить, играя на данной строке.
7
-1 -1 -1 -1 -1 -1 -1
abacaba
0
7
1 -1 -1 -1 -1 -1 -1
abacaba
7
7
1 5 -1 -1 -1 -1 10
abacaba
16
В первом примере у нас нет возможности удалить ни одной подстроки, поэтому лучший результат 0. Во втором примере нам разрешено удалять палиндромы длины только 1, таким образом, удалив всю строку, мы получим 7 очков. В третьем примере следующая оптимальная стратегия: сначала удаляем символ c, затем строку aa, затем bb, и последнюю aa. При этом получаем 1 + 3 * 5 = 16 очков.
Название |
---|