Cod sursa(job #1241918)

Utilizator cristian.caldareaCaldarea Cristian Daniel cristian.caldarea Data 13 octombrie 2014 20:39:24
Problema Problema rucsacului Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <fstream>
using namespace std;

ifstream fin("rucsac.in");
ofstream fout("rucsac.out");
const int MaxN = 5002;
const int MaxV = 10001;
const int Inf = 0x3f3f3f3f;

int n, S;
int v[MaxN];
int g[MaxN];
int c[2][MaxV];    // c[i][j] - val maxima obtinuta cu obiecte [1..i]
                   // care au in total greutatea CEL MULT j

void Read();
void Knapsack();

int main()
{
    Read();
    Knapsack();
}

void Knapsack()
{
    int lc = 1, lp = 0;
    for ( int i = 1; i <= n; ++i, lc = !lc, lp = !lp )
        for ( int j = 0; j <= S ; ++j )
        {
            c[lc][j] = c[lp][j];
            if ( j >= g[i]  && c[lc][j] < c[lp][j - g[i]] + v[i] )
                c[lc][j] = c[lp][j - g[i]] + v[i];
        }
    fout << c[lp][S];
}

void Read()
{
    fin >> n >> S;
    for ( int i = 1; i <= n; ++i )
        fin >> g[i] >> v[i];
}