Pagini recente » Cod sursa (job #1944692) | Cod sursa (job #2244680) | Cod sursa (job #2649785) | Cod sursa (job #2818060) | Cod sursa (job #769541)
Cod sursa(job #769541)
#include <fstream>
#define MAXS 10004
#define MAXN 5003
using namespace std;
ifstream f("rucsac.in");
ofstream g("rucsac.out");
int V[MAXS], T[MAXS], P[MAXS];
int A[MAXN];
int N, S, i, j, maxim;
//V[i] = profitul maxim de a incarca greutati de valoare i
int main() {
f>>N>>S;
for (i=1;i<=N;i++)
f>>A[i]>>P[i];
for (i=1;i<=N;i++) {
for (j=S;j>=0;j--)
if ( (V[j] !=0 || j==0) && j+A[i] <= S) {
//adaug produsul i la o cantitate j doar daca se obtinuse anterior greutatea j sau singur si doar daca
//greutatea j + cea a produsului curent nu depaseste capacitatea rucsacului
if (V[j+A[i]] < V[j] + P[i]){ //daca obtinusem deja acea greutate poate acum o obtin cu un profit mai bun
V[j+A[i]] = V[j] + P[i];
//T[j+A[i]] = i;
}
}
}
//iau acea solutie cu profit maxim si greutate cel mult S, nu neaparat S
for (i=S;i>=0;i--)
if (V[i] > maxim)
maxim = V[i];
g<<maxim;
return 0;
}