Cod sursa(job #878053)

Utilizator gabrielvGabriel Vanca gabrielv Data 13 februarie 2013 21:07:17
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <cstdio>

using namespace std;

#define maxim(a,b) ((a>b)?(a):(b))
#define minim(a,b) ((a<b)?(a):(b))
#define NMAX 5015

int V[NMAX];
int N,G,IMAX,Y,X;

int main()
{
    freopen("rucsac.in","r",stdin);
    freopen("rucsac.out","w",stdout);

    scanf("%d%d",&N,&G);
    N--;
    scanf("%d%d",&Y,&X);
    V[X]=Y; IMAX=X;
    while(N--)
    {
        scanf("%d%d",&Y,&X);
        for(int i=IMAX;i;i--)
        {
            if(V[i])
                if(V[i]+Y<2*NMAX)
                    if(V[i+X]==0)
                        V[i+X]=V[i]+Y;
                    else
                        V[i+X]=minim(V[i]+Y,V[i+X]);
        }
        IMAX+=X;

        if(V[X]==0)
            V[X]=Y;
        else
            V[X]=minim(Y,V[X]);
    }

    int c=0;
    for(int i=IMAX;!c;i--)
        if(V[i]<=G)
            c=i;
    printf("%d\n",c);
    return 0;
}