Cerință
Se dǎ o matrice cu și . Considerăm că avem în celulele libere și în celulele ocupate. Dorim să completăm cu cât mai multe linii consecutive din partea de jos a matricei (adică să fie complete linia , linia , ). Dispunem de operația: selectăm o celulă egală cu și apoi o putem trage la stânga, la dreapta sau în jos până o fixăm unde dorim. O putem trage din poziția curentă în una vecină doar dacă acea poziție este liberǎ. Practic o putem muta în alt loc mai jos (sau pe același rând) mergând prin zone libere. Mutarea la stânga sau la dreapta nu costă nimic, dar mutarea în jos are costul egal cu numărul de rânduri care se coboară.
Să se determine:
- Numărul maxim de linii care se pot completa jos. Atenție, ne intereseazǎ doar numǎrul de linii pline de 1, cele parțial completate sunt ignorate.
- Costul minim pentru a completa acest număr maxim de linii.
Date de intrare
Pe prima linie a fișierului de intrare drag.in
se aflǎ un număr reprezentând cerința de rezolvat și un număr reprezentând dimensiunea matricei (care este una pătratică).
Pe fiecare din următoarele linii se află câte valori sau reprezentând configurația matricei date. Liniile sunt numerotate de sus în jos începând cu 1 iar coloanele sunt numerotate de la stânga la dreapta, de asemenea, începând cu 1. Numerele de pe aceeași linie sunt separate prin spațiu.
Date de ieșire
În fișierul drag.out
, se va scrie astfel:
- O valoare, reprezentând numărul maxim de rânduri care se pot completa jos, dacă avem .
- Două valori, separate prin spațiu, reprezentând respectiv: numărul maxim de rânduri care se pot completa jos și costul minim pentru a completa acest număr de rânduri, dacă avem .
Restricții și precizări
- ;
- ;
- Pentru de puncte ;
- Pentru de puncte ;
- Atenție, dacă avem , în fișierul de ieșire scriem doar un număr;
Exemplul 1
drag.in
1 4
1 1 0 1
1 0 0 0
1 0 1 1
1 1 0 1
drag.out
2
Exemplul 2
drag.in
2 4
1 1 0 1
1 0 0 0
1 0 1 1
1 1 0 1
drag.out
2 4
Explicație
- Valoarea de pe linia a doua, o putem trage o poziție la dreapta și apoi una în jos (se completează cu 1 elementul de pe linia și coloana ). Costul până acum este .
- Valoarea de pe linia și coloana se deplasează o poziție în jos. Astfel, avem completată ultima linie. Costul total este până acum .
- Valoarea de pe linia și coloana se deplasează o poziție la stânga și apoi două în jos, ocupând locul lăsat liber prin mutarea elementului anterior, astfel completându-se și a doua linie de jos. Costul final devenind .