eolymp
bolt
Спробуйте наш новий інтерфейс для відправки розв'язків
Задачі

Однонаправлена ЗК

Однонаправлена ЗК

Проблеми, які вимагають пошуку мінімального шляху через деяку область з'являються у різних областях інформатики. Наприклад, одним з обмежень у проблемі маршрутизації НВІС є мінімізація довжини провідника. Задача Комівояжера (ЗК) - пошук маршруту продавця по усіх містах з можливістю відвідати кожне з них лише один раз на своєму шляху - один з канонічних прикладів \textbf{NP}-повної задачі, для розв'язання якої, скоріше усього, знадобиться багато часу. У цій задачі розглядається знаходження мінімального шляху через мережу пунктів з переміщенням під час подорожі лише зліва праворуч. Для заданої матриці чисел \textbf{m}×\textbf{n }ви повинні написати програму, яка обчислює шлях мінімальної ваги. Шлях ропочинається де-нубудь у колонці \textbf{1} (перша колонка) і складається з послідовності кроків, яка завершується у колонці \textbf{n }(остання колонка). Крок полягає у переміщенні з колонки \textbf{i }у сусідню (по горизонталі чи діагоналі) колонку \textbf{i+1 }підряд. Перший та останній рядки (рядки \textbf{1} та \textbf{m} ) матриці вважаються суміжними, тобто матрицю "сгорнуто" так, що вона являє собою горизонтальний циліндр. Допустимі кроки показано нижче. \includegraphics{https://static.e-olymp.com/content/a4/a49ec87fe2153d1db7b467d154dc51b464c8a0eb.jpg} \textit{Вагою} шляху є сума чисел у кожній з відвіданих \textbf{n} клітинок матриці. Наприклад, два трохи відмінних шляхи найменшої веги у матрицях \textbf{5}×\textbf{6} показано нижче (різниця лише у цифрах у нижньому ряду). \includegraphics{https://static.e-olymp.com/content/ed/edd52b9d44deca9ef5f8583380e4f435153daa67.jpg} Мінімальний путь показано для кожної матриці. Зверніть увагу, що шлях у матриці праворуч використовує властивість суміжності першого та останнього рядків. \InputFile Вхідні дані складаються з послідовності матриці специфікацій. Кожна матриця специфікації складається з рядків та стовбців розміром \textbf{m}×\textbf{n} - саме у такому порядку по рядкам йде \textbf{m}×\textbf{n} цілих чисел, де \textbf{m} - це кількість рядків і \textbf{n} - це кількість стовбців. Числа з'являються у рядоках на вході порядково, тобто, перші \textbf{n }цілих чисел складають перший рядок матриці, другі \textbf{n }цілих чисел складають другий рядок і так далі. Числа у рядку будуть відокремлені одне від одного одним чи декількома пропусками. \textit{\textbf{Примітка:}} не гарантується, що усі числа додатні. Вам буде запропоновано одну чи декілька матриць у вхідному файлі. Вхідні дані завершуються кінцем файлу. Для кожної специфікації кількість рядків буде міжу \textbf{1} і \textbf{9} включно, кількість стовбців буде між \textbf{1} і \textbf{100 }включно. Вага шляху не буде перевищувати ціле число, яке можна подати змінною за допомогою \textbf{30} бітів. \OutputFile Два рядки потрібно вивести для кожної матриці специфікації зі вхідного файлу, перший рядок являє собою шлях мінімальної ваги, а другий рядок є вартістю мінімального шляху. Шлях складається з послідовності \textbf{n} цілих чисел (відокремлених одним пропуском), що подають рядки, які є мінімальними шляхами. Якщо є більше ніж один шлях мінімальної ваги, необхідно вивести той, який є лексикографічно найменшим.
Ліміт часу 1 секунда
Ліміт використання пам'яті 64 MiB
Вхідні дані #1
5 6
3 4 1 2 8 6
6 1 8 2 7 4
5 9 3 9 9 5
8 4 1 3 2 6
3 7 2 8 6 4
5 6
3 4 1 2 8 6
6 1 8 2 7 4
5 9 3 9 9 5
8 4 1 3 2 6
3 7 2 1 2 3
2 2
9 10
9 10
Вихідні дані #1
1 2 3 4 4 5
16
1 2 1 5 4 5
11
1 1
19