Cerința
Î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, 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.
Date de intrare
Programul citește de la tastatură numerele naturale n GMax
, iar apoi n
perechi de valori G V
, reprezentând greutatea, respectiv valoarea fiecărui obiect.
Date de ieșire
Programul va afișa pe ecran numărul C
, reprezentând câștigul maxim pe care îl poate obține hoțul.
Restricții și precizări
1 ≤ n ≤ 1.000
;1 ≤ G, V, GMax ≤ 10.000
Exemplu
Intrare
5 20 2 3 4 5 5 8 3 4 9 10
Ieșire
26
Explicație
Hoțul va lua obiectele 1
, 2
, 3
și 5
, obținând un câștig de 26
.
#include <bits/stdc++.h> using namespace std; struct poz { int g , c; }a[1001]; int n , G , C[1001][10001]; void dinamica() { for(int i = 1 ; i <= n ; i++) for(int j = 1 ; j <= G ; j++) if(a[i].g <= j && a[i].c + C[i - 1][j - a[i].g] > C[i - 1][j]) C[i][j] = a[i].c + C[i - 1][j - a[i].g]; else C[i][j] = C[i - 1][j]; } int main() { cin >> n >> G; for(int i = 1 ; i <= n ; i++) cin >> a[i].g >> a[i].c; dinamica(); cout << C[n][G]; }