0526 - Preturi

From Bitnami MediaWiki
Revision as of 13:41, 4 November 2023 by Ghisa Catalin (talk | contribs) (Pagină nouă: == 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 natu...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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>

  1. 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)]

  1. Inițializăm suma minimă cu 0

suma_minima = 0

  1. 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]
  1. Afișăm suma minimă

print(suma_minima)

</syntaxhighlight>