1340 - Rucsac: Diferență între versiuni

De la Universitas MediaWiki
(Pagină nouă: 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țiun...)
 
Fără descriere a modificării
Linia 7: Linia 7:
Date de iesire  
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.
Programul va afișa pe ecran numărul C, reprezentând câștigul maxim pe care îl poate obține hoțul.
Rezolvare
Rezolvare
 
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)

Versiunea de la data 13 decembrie 2023 17:09

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

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]

# 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)