1340 - Rucsac: Difference between revisions
Andrada378 (talk | contribs) 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... |
Andrada378 (talk | contribs) No edit summary |
||
Line 7: | Line 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) | ||
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ă | |||
# 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()) | ||
obiecte.append((G, V)) | |||
max_profit = maximized_profit(n, GMax, obiecte) | |||
max_profit = maximized_profit(n, GMax, obiecte) | print(max_profit) | ||
print(max_profit) |
Revision as of 17:09, 13 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
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)