0527 - Preturi1
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ă Gigel trebuie să cumpere toate produsele din același 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
- trebuie cumpărate toate produsele, din același magazin
Exemplu
- Intrare
- 5
- 4 4 5 1 2
- 3
- 5 8 6 2 6
- -1 4 1 1 5
- 6 6 8 3 9
- Ieșire
- 96
Explicatie
La magazinul 1 produsele costă 96, la magazinul 3 produsele costă 109, iar din magazinul 2 nu se poate cumpăra produsul 1.
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 infinit
suma_minima = float('inf')
- Parcurgem fiecare magazin
for i in range(m):
# Calculăm suma totală a produselor din magazinul curent suma_curenta = 0 for j in range(n): # Dacă produsul nu este disponibil în magazinul curent, trecem la următorul magazin if preturi[i][j] == -1: suma_curenta = float('inf') break # Adăugăm la suma curentă prețul produsului înmulțit cu cantitatea necesară suma_curenta += preturi[i][j] * cantitati[j] # Actualizăm suma minimă suma_minima = min(suma_minima, suma_curenta)
- Verificăm dacă a fost posibilă cumpărarea tuturor produselor
if suma_minima == float('inf'):
print("Nu este posibilă cumpărarea tuturor produselor.")
else:
# Afișăm suma minimă print(suma_minima)
</syntaxhighlight>