0526 - Preturi
Cerinţa
Gigel trebuie să cumpere n produse, pentru fiecare produs cunoscându-se cantitate necesară. În oraș sunt m magazine, în fiecare magazin găsindu-se produsele dorite la anumite prețuri. Determinați suma totală minimă necesară pentru a cumpăra produsele dorite, știind că poate cumpăra orice produs din orice magazin.
Date de intrare
Programul citește de la tastatură, în ordine:
- numărul de produse n
- n numere naturale, reprezentând cantitățile necesare din fiecare produs
- numărul de magazine m
- m șiruri de câte n numere, șirul i conținând în ordine prețurile celor n produse la magazinul i. Dacă la un magazin nu există un anumit produs, valoarea prețului va fi -1
Date de ieșire
Programul va afișa pe ecran numărul S, reprezentând suma minimă determinată.
Restricţii şi precizări
- 1 ⩽ n , m ⩽ 100
- cantitățile necesare sunt numere naturale nenule mai mici sau egale cu 1000
- prețurile produselor sunt numere naturale nenule mai mici sau egale cu 1000, sau -1, cu semnificația de mai sus
Exemplu
- Intrare
- 5
- 4 4 5 1 2
- 3
- 5 8 6 -1 6
- -1 4 8 9 5
- 6 6 8 3 9
- Ieșire
- 79
Explicatie
Din magazinul 1 se cumpără produsele 1 3; din magazinul 2 se cumpără produsele 2 5, iar din magazinul 3 se cumpără produsul 4. În total se plătesc 4 * 5 + 4 * 4 + 5 * 6 + 1 * 3 + 2 * 5 = 79.
Rezolvare
<syntaxhighlight lang="python" line>
- Citirea datelor de intrare
n = int(input()) cantitati = list(map(int, input().split())) m = int(input()) preturi = [list(map(int, input().split())) for _ in range(m)]
- Inițializăm suma minimă cu 0
suma_minima = 0
- Parcurgem fiecare produs
for i in range(n):
# Găsim prețul minim pentru produsul curent pret_minim = float('inf') for j in range(m): # Dacă produsul este disponibil în magazinul curent și prețul este mai mic decât prețul minim curent if preturi[j][i] != -1 and preturi[j][i] < pret_minim: pret_minim = preturi[j][i] # Adăugăm la suma minimă prețul minim al produsului curent înmulțit cu cantitatea necesară suma_minima += pret_minim * cantitati[i]
- Afișăm suma minimă
print(suma_minima)
</syntaxhighlight>