Fișierul intrare/ieșire | pdm.in, pdm.out | Sursă | ad-hoc |
---|---|---|---|
Autor | din folclor | Adăugată de | Calin Stefan Georgescu • calingeorgescu |
Timp de execuție pe test | 1.5 sec | Limită de memorie | 16384 KB |
Scorul tău | N/A | Dificultate |
Vezi soluțiile trimise | Statistici
Pdm
Se dă un produs matricial M = M1M2...Mn. În înmulțirea matricelor, se înmulțește fiecare linie din prima matrice cu fiecare coloană din a 2 – a matrice. Pentru ca această operație să fie posibilă, matricele trebuie să aibă o latură comună. Spre exemplu, prima matrice are a linii și b coloane, iar ce-a de a 2 – a are b linii și c coloane, iar matricea rezultată va avea a linii și c coloane. Numărul de înmulțiri elementare a celor 2 matrici de mai sus este a *b *c. Cum înmulțirea matricelor este asociativă, toate parantezările conduc la același rezultat. Însă, numărul total de înmulțiri scalare al produsului matricial poate să difere substanțial în funcție de ordinea efectuării calculelor, ordine dată de paranteze. Dimensiunile celor n matrici se dau sub forma unui șir d astfel încât perechea (di-1, di) reprezintă dimensiunile matricii Mi.
Cerinta
Se cere să se minimizeze numărul total de înmulțiri scalare al produsului matricial M, precum și o parantezare care dă acest număr de produse scalare.
Date de intrare
Fișierul de intrare pdm.in conține pe prima linie un număr natural n, reprezentând numărul matricelor. Pe următoarea linie se găsesc n + 1 numere naturale, reprezentând valorile șirului d.
Date de ieșire
În fișierul de ieșire pdm.out se va găsi un singur număr natural egal cu valoarea minimă a numărului total de înmulțiri scalare a produsului matricial M și parantezarea optimă corespunzătoare acestuia.
Formatul afișării unei parantezări este următorul: -dacă parantezarea conține un factor, se va afișa doar acesta -dacă parantezarea conține doi factori, va fi pusă între paranteze, iar factorii ei afișați pe rând
Restricții
- 1 ≤ N ≤ 500
- 0 ≤ d ≤ 1000
- În cazul în care există mai multe soluții, de exemplu A și B, se va afișa parantezarea care ar realiza primele k înmulțiri între aceleași matrice , îar a k+1-a înmulțire în ordine inversă, la o matrice de ordin mai mic. În alte cuvinte, dacă avem 3 matrice, iar variantele ((A*B)*C), (A*(B*C)) oferă aceeași soluție, se va alege prima variantă.
- Pentru afișarea corectă doar a numărului de înmulțiri scalare, se acordă 40% din punctaj.
Exemplu
pdm.in | pdm.out |
---|---|
4 13 5 89 3 34 |
2856 ((1*(2*3))*4) |