Cod sursa(job #406924)

Utilizator SheepBOYFelix Liviu SheepBOY Data 1 martie 2010 21:45:14
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <stdio.h>   
  
#define gmax 1005   
#define wmax 5005   
#define inf 10000000   
  
struct nimic   
{   
    int e, c;   
};   
  
int g, w, min=inf;   
nimic G [gmax], poz [wmax];   
  
void scan ()   
{   
    int i;   
    scanf ("%d%d", &g, &w);   
    for (i=1; i<=g; ++i)   
        scanf ("%d%d", &G [i].e, &G [i].c);   
  
}   
  
void init ()   
{   
    int i;   
    for (i=1; i<=w; ++i)   
        poz [i].c=inf;   
}   
  
inline int minim (int a, int b)   
{   
    if (a < b)   
        return a;   
    return b;   
}   
  
void sume ()   
{   
    int i, j, a;   
    poz [0].e=1;   
    poz [0].c=0;   
    init ();   
    for (i=1; i<=g; ++i)   
        for (j=w; j>=0; --j)   
            if (poz [j].e != 0)   
            {   
                a=j+G [i].e;   
                if (a >= w)   
                {   
                    if (min > poz [j].c+G[i].c)   
                        min=poz [j].c+G [i].c;   
                }   
                else  
                {   
                    poz [a].c=minim (poz [a].c, poz [j].c+G [i].c);   
                    poz [a].e=1;   
                }   
            }   
               
}   
  
int main ()   
{   
    freopen ("energii.in", "r", stdin);   
    freopen ("energii.out", "w", stdout);   
    scan ();   
    sume ();   
    if (min < inf)   
        printf ("%d\n", min);   
    else  
        printf ("-1");   
    return 0;   
}