Cod sursa(job #1668803)

Utilizator andreiskiorAndrei Cristian Nastase andreiskior Data 30 martie 2016 08:52:27
Problema Problema rucsacului Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <stdio.h>

#define len_MAX 5000

int profit[len_MAX],greutate[len_MAX],rucsac[2*len_MAX + 1];

int main()
{
    freopen("rucsac.in","r",stdin);
    freopen("rucsac.out","w",stdout);
    int N,G;
    int i,j,mx;
    int x,y;
    scanf("%d %d",&N,&G);
    for(i = 1; i <= N; ++i)
    {
        scanf("%d %d",&x,&y);
        greutate[i] = x;
        profit[i] = y;
    }
    mx = greutate[1];
    for(i = 1; i <= N; ++i)
    {
        for(j = mx; j >= 1; --j)
        {
            if(rucsac[j] > 0 && rucsac[j + greutate[i]] < rucsac[j] + profit[i]){
                rucsac[j + greutate[i]] = rucsac[j] + profit[i];
            if(j + greutate[i] > mx)
                mx = j + greutate[i];
            }
        }
        if(rucsac[greutate[i]] == 0)
            rucsac[greutate[i]] = profit[i];
    }
    mx = 0;
    for(i = G; i >= 0; --i)
        if(rucsac[i] > mx)
            mx = rucsac[i];
    printf("%d\n",mx);
    return 0;
}