Олимпиадный тренинг

Задача . F. Замена подматриц


Задача

Темы: битмаски дп *2200

Вам дана матрица f, состоящая из 4 строк и n столбцов. Любой элемент матрицы — либо звездочка (*), либо точка (.).

Над матрицей можно произвольное число раз производить следующую операцию: выбрать квадратную подматрицу f размера k × k (где 1 ≤ k ≤ 4) и заменить каждый элемент в выбранной подматрице на точку. Выбор подматрицы размера k × k стоит ak монет.

Какое минимальное количество монет необходимо потратить, чтобы заменить все звездочки на точки?

Входные данные

В первой строке записано одно целое число n (4 ≤ n ≤ 1000) — количество столбцов в f.

Во второй строке записаны 4 целых числа a1, a2, a3, a4 (1 ≤ ai ≤ 1000) — цена замены квадратных подматриц размеров 1 × 1, 2 × 2, 3 × 3 и 4 × 4, соответственно.

Затем идет четыре строки, в каждой по n символов, обозначающие строки матрицы f. Любой символ — либо точка, либо звездочка.

Выходные данные

Выведите одно целое число — минимальное количество монет, требующихся для замены всех звездочек на точки.

Примечание

В первом примере можно потратить 8 монет для замены подматрицы 3 × 3 в верхнем левом углу и 1 монету для замены подматрицы 1 × 1 в нижнем правом углу.

Во втором примере лучшим вариантом будет заменить подматрицу 4 × 4 из столбцов 2 – 5 и подматрицу 2 × 2 из строк 2 – 3 и столбцов 6 – 7.

В третьем примере можно выбрать подматрицу 3 × 3 в верхнем левом углу и подматрицу 3 × 3 из строк 2 – 4 и столбцов 2 – 4.


Примеры
Входные данныеВыходные данные
1 4
1 10 8 20
***.
***.
***.
...*
9
2 7
2 1 8 2
.***...
.***..*
.***...
....*..
3
3 4
10 10 1 10
***.
*..*
*..*
.***
2

time 1000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Комментарий учителя