1340 - Rucsac: Difference between revisions

From Bitnami MediaWiki
Andrada378 (talk | contribs)
No edit summary
Andrada378 (talk | contribs)
No edit summary
Line 8: Line 8:
Programul va afișa pe ecran numărul C, reprezentând câștigul maxim pe care îl poate obține hoțul.
Programul va afișa pe ecran numărul C, reprezentând câștigul maxim pe care îl poate obține hoțul.


Rezolvare
Rezolvare<syntaxhighlight lang="python">
def maximized_profit(n, GMax, obiecte):
def maximized_profit(n, GMax, obiecte):
    dp = [0] * (GMax + 1)
    dp = [0] * (GMax + 1)
 
    for i in range(1, n + 1):
    for i in range(1, n + 1):
        for j in range(GMax, 0, -1):
        for j in range(GMax, 0, -1):
            if obiecte[i - 1][0] <= j:
            if obiecte[i - 1][0] <= j:
                dp[j] = max(dp[j], dp[j - obiecte[i - 1][0]] + obiecte[i - 1][1] * (obiecte[i - 1][0] / obiecte[i - 1][0]))
                dp[j] = max(dp[j], dp[j - obiecte[i - 1][0]] + obiecte[i - 1][1] * (obiecte[i - 1][0] / obiecte[i - 1][0]))
 
    return dp[GMax]
    return dp[GMax]
 
# Citirea datelor de la tastatură
# Citirea datelor de la tastatură
n = int(input("Introdu numărul de obiecte: "))
n = int(input("Introdu numărul de obiecte: "))
GMax = int(input("Introdu greutatea maximă ce poate fi transportată: "))
GMax = int(input("Introdu greutatea maximă ce poate fi transportată: "))
 
obiecte = []
obiecte = []
print("Introdu greutatea și valoarea pentru fiecare obiect:")
print("Introdu greutatea și valoarea pentru fiecare obiect:")
for i in range(n):
for i in range(n):
    G, V = map(int, input().split())
    G, V = map(int, input().split())
    obiecte.append((G, V))
    obiecte.append((G, V))
 
max_profit = maximized_profit(n, GMax, obiecte)
max_profit = maximized_profit(n, GMax, obiecte)
print(max_profit)
print(max_profit)
</syntaxhighlight>

Revision as of 13:56, 28 December 2023

Cerinta: Într-un magazin sunt n obiecte; pentru fiecare se cunoaște greutatea G și valoarea V. Un hoț intră în magazin având un rucsac ce poate transporta o greutate maximă GMax. El va fura anumite obiecte, sau porțiuni de obiecte, astfel încât suma greutăților obiectelor furate să nu depășească GMax.

Să se stabilească câștigul maxim pe care îl poate obține hoțul. Câștigul este egal cu suma valorilor obiectelor furate. Câștigul adus de o fracțiune de obiect este direct proporțional cu greutatea fracțiunii. Date de intrare Programul citește de la tastatură numerele naturale n GMax, iar apoi n perechi de valori naturale G V, reprezentând greutatea, respectiv valoarea fiecărui obiect. Date de iesire Programul va afișa pe ecran numărul C, reprezentând câștigul maxim pe care îl poate obține hoțul.

Rezolvare<syntaxhighlight lang="python"> def maximized_profit(n, GMax, obiecte):

   dp = [0] * (GMax + 1)
   for i in range(1, n + 1):
       for j in range(GMax, 0, -1):
           if obiecte[i - 1][0] <= j:
               dp[j] = max(dp[j], dp[j - obiecte[i - 1][0]] + obiecte[i - 1][1] * (obiecte[i - 1][0] / obiecte[i - 1][0]))
   return dp[GMax]
  1. Citirea datelor de la tastatură

n = int(input("Introdu numărul de obiecte: ")) GMax = int(input("Introdu greutatea maximă ce poate fi transportată: "))

obiecte = [] print("Introdu greutatea și valoarea pentru fiecare obiect:") for i in range(n):

   G, V = map(int, input().split())
   obiecte.append((G, V))

max_profit = maximized_profit(n, GMax, obiecte) print(max_profit) </syntaxhighlight>