Cod sursa(job #769541)

Utilizator mariamFiciu Maria mariam Data 19 iulie 2012 19:52:36
Problema Problema rucsacului Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#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;
}