Cod sursa(job #931579)

Utilizator rudarelLup Ionut rudarel Data 28 martie 2013 12:49:59
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <stdio.h>
 
int main()
{
    int i, j, g, w;
    int* eg;
    int* cg;
    int* c;
    int p = -1;
 
    freopen("energii.in", "rt", stdin);
    freopen("energii.out", "wt", stdout);
 
    scanf("%d%d", &g, &w);
 
    eg = new int[g];
    cg = new int[g];
    c = new int[ (2 * w) + 1 ];
    c[0] = 1;
 
    for(i = 1; i < (2 * w) + 1; i++) c[i] = 0;
 
    for(i = 0; i < g; i++)
    {
        scanf("%d%d", &eg[i], &cg[i]);
    }
 
    for(i = 0;  i < g; i++)
    {
        for(j = 2 * w; j >= eg[i]; j--)
        {
            if(c[j - eg[i]] && (!c[j] || (c[j - eg[i]] + cg[i] < c[j])))
            {
                c[j] = c[j - eg[i]] + cg[i];
     
                if(j >= w)
                {
                    if((p == -1) || (c[p] > c[j]))
                        p = j;
                }
            }
        }
    }
 
    if(p != -1)
    {
        printf("%d\n", c[p] - 1);
    }
    else
    {
        printf("-1\n");
    }
 
    return 0;
}