0527 - Preturi1

From Bitnami MediaWiki
Revision as of 13:47, 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ă 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''' * '...)
(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ă 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>

  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 infinit

suma_minima = float('inf')

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