Cod sursa(job #806611)

Utilizator macauaMacaua Online macaua Data 3 noiembrie 2012 09:57:57
Problema Problema rucsacului Scor 35
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <fstream>
#include <cmath>

using namespace std;

int GR[5001], P[5001], n, D[5001][5001];

int rez(int G, int k)
{
    if(k - 1 == n)
    {
        if(D[G][k] == NULL)
            D[G][k] = 0;

        return D[G][k];
    }

    if(G < GR[k])
    {
        if(D[G][k + 1] == NULL)
            D[G][k + 1] = rez(G, k + 1);

        return D[G][k + 1];
    }
    else
    {
        if(D[G][k + 1] == NULL)
            D[G][k + 1] = rez(G, k + 1);
        if(D[G-GR[k]][k + 1] == NULL)
            D[G-GR[k]][k + 1] = rez(G - GR[k], k + 1);

        return max(D[G][k + 1], P[k] + D[G-GR[k]][k + 1]);
    }
}

int main()
{

    freopen("rucsac.in", "r", stdin);
    freopen("rucsac.out", "w", stdout);
    int gm;
    cin>>n>>gm;

    for(int i=1;i<=n;++i)
        cin>>GR[i]>>P[i];

    cout<<rez(gm, 1)<<"\n";
    return 0;
}