Pagini recente » Cod sursa (job #2535009) | Cod sursa (job #745754) | Cod sursa (job #1640389) | Cod sursa (job #417319) | Cod sursa (job #1364401)
using namespace std;
#include <iostream>
#include <fstream>
#define MAXN 5010
#define MAXG 10010
ofstream fout("rucsac.out");
int N, G, Pmax,W[MAXN], P[MAXN],DP[MAXN][MAXG];
void Citire()
{
ifstream fin("rucsac.in");
fin>>N>>G;
for(int i = 1; i <= N; ++i)
fin>>W[i]>>P[i];
}
void Rezolvare()
{
//DP[i][g] - profitul maxim care se poate obtine avand la dispozitie primele i obiecte,folosind un ruscac de greutate g
for(int i = 1; i <= N; ++i)
{
DP[i][0]=0;
for(int g = 0; g <= G; g++)
{
// Mai intai nu punem obiectul i.
DP[i][g] = DP[i-1][g];
// Daca acest obiect duce la o solutie mai buna,
// se adauga obiectul i la o solutie anterioara.
if(W[i] <= g)
DP[i][g] = max(DP[i][g], DP[i - 1][g - W[i]] + P[i]);
}
}
}
void Afisare()
{
// Solutia se va afla in starea D[N][G]
// Profitul maxim care se poate obtine avand la dispozitie //toate cele N obiecte si un rucscac de greutate G
fout<<DP[N][G];
}
int main()
{
Citire();
Rezolvare();
Afisare();
return 0;
}