Cod sursa(job #1364401)

Utilizator bilbor987Bogdan Pocol bilbor987 Data 27 februarie 2015 17:28:47
Problema Problema rucsacului Scor 35
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
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;
}