2772 - Placinte: Difference between revisions

From Bitnami MediaWiki
Andrada378 (talk | contribs)
Pagină nouă: Cerinta: Știind că fata va mânca fără preferințe câte seturi de plăcinte va vrea din fiecare tip, să se calculeze timpul minim necesar pentru a mânca cel puțin k plăcinte. Date de intrare: Programul citește de la tastatură numerele n, k și apoi n numere, reprezentând timpurile T1,T2,…,Tn necesare pentru a mânca un set din fiecare tip de plăcintă (în ordine, tipurile 1, 2, …, n). Date de iesire: Programul va afișa pe ecran un singur număr, timplul mi...
 
Andrada378 (talk | contribs)
No edit summary
Line 2: Line 2:
Știind că fata va mânca fără preferințe câte seturi de plăcinte va vrea din fiecare tip, să se calculeze timpul minim necesar pentru a mânca cel puțin k plăcinte.
Știind că fata va mânca fără preferințe câte seturi de plăcinte va vrea din fiecare tip, să se calculeze timpul minim necesar pentru a mânca cel puțin k plăcinte.
Date de intrare:
Date de intrare:
Programul citește de la tastatură numerele n, k și apoi n numere, reprezentând timpurile T1,T2,…,Tn
Programul citește de la tastatură numerele n, k și apoi n numere, reprezentând timpurile T1,T2,…,Tn  necesare pentru a mânca un set din fiecare tip de plăcintă (în ordine, tipurile 1, 2, …, n).
  necesare pentru a mânca un set din fiecare tip de plăcintă (în ordine, tipurile 1, 2, …, n).
 
Date de iesire:
Date de iesire:
Programul va afișa pe ecran un singur număr, timplul minim necesar pentru a mânca cel puțin k plăcinte.
Programul va afișa pe ecran un singur număr, timplul minim necesar pentru a mânca cel puțin k plăcinte.
Rezolvare:
Rezolvare:
def timp_minim_placinte(Ti, n, k):
  def timp_minim_placinte(Ti, n, k):
    dp = [float('inf')] * (k + 1)
    dp = [float('inf')] * (k + 1)
    dp[0] = 0
    dp[0] = 0
 
    for i in range(1, k + 1):
    for i in range(1, k + 1):
        for j in range(n):
        for j in range(n):
            if i >= 2 ** j:
            if i >= 2 ** j:
                dp[i] = min(dp[i], dp[i - 2 ** j] + (2 ** j) * Ti[j])
                dp[i] = min(dp[i], dp[i - 2 ** j] + (2 ** j) * Ti[j])
 
    return dp[k]
    return dp[k]
 
# Citirea datelor de la tastatură
# Citirea datelor de la tastatură
n = int(input("Introdu numărul de tipuri de plăcinte: "))
n = int(input("Introdu numărul de tipuri de plăcinte: "))
k = int(input("Introdu numărul minim de plăcinte de consumat: "))
k = int(input("Introdu numărul minim de plăcinte de consumat: "))
Ti = list(map(int, input("Introdu timpurile necesare pentru fiecare tip de plăcinte: ").split()))
Ti = list(map(int, input("Introdu timpurile necesare pentru fiecare tip de plăcinte: ").split()))
 
timp_minim = timp_minim_placinte(Ti, n, k)
timp_minim = timp_minim_placinte(Ti, n, k)
print(timp_minim)
print(timp_minim)

Revision as of 18:22, 13 December 2023

Cerinta: Știind că fata va mânca fără preferințe câte seturi de plăcinte va vrea din fiecare tip, să se calculeze timpul minim necesar pentru a mânca cel puțin k plăcinte. Date de intrare: Programul citește de la tastatură numerele n, k și apoi n numere, reprezentând timpurile T1,T2,…,Tn necesare pentru a mânca un set din fiecare tip de plăcintă (în ordine, tipurile 1, 2, …, n).

Date de iesire: Programul va afișa pe ecran un singur număr, timplul minim necesar pentru a mânca cel puțin k plăcinte.

Rezolvare:

  def timp_minim_placinte(Ti, n, k):
    dp = [float('inf')] * (k + 1)
    dp[0] = 0

    for i in range(1, k + 1):
        for j in range(n):
            if i >= 2 ** j:
                dp[i] = min(dp[i], dp[i - 2 ** j] + (2 ** j) * Ti[j])

    return dp[k]

# Citirea datelor de la tastatură
n = int(input("Introdu numărul de tipuri de plăcinte: "))
k = int(input("Introdu numărul minim de plăcinte de consumat: "))
Ti = list(map(int, input("Introdu timpurile necesare pentru fiecare tip de plăcinte: ").split()))

timp_minim = timp_minim_placinte(Ti, n, k)
print(timp_minim)