Cod sursa(job #1466790)

Utilizator CollermanAndrei Amariei Collerman Data 30 iulie 2015 14:41:00
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.57 kb
#include <fstream>
using namespace std;
ifstream fin("rucsac.in");
ofstream fout("rucsac.out");
const int NMAX = 5005;

int N, G, nr;
int W[NMAX], P[NMAX], PD[NMAX][NMAX];

int pd(int st, int dr, int gmax)
{
    if( (gmax - W[st] < 0) || (gmax - W[dr] < 0) || (st > dr)) return 0;

    if(PD[st][dr])
        return PD[st][dr];

    return PD[st][dr] = max( pd(st+1,dr,gmax - W[st]) + P[st], pd(st,dr-1,gmax - W[dr]) + P[dr]);
}

int main()
{
    fin >> N >> G;
    for(int i=1; i<=N; i++) fin >> W[i] >> P[i];
    fout << pd(1, N, G);

    return 0;
}