Cod sursa(job #141256)

Utilizator alex_dincaDinca Alexandru-Nicolae - UPB alex_dinca Data 22 februarie 2008 22:10:42
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <cstdio>     
     
#define GM 1010     
#define WM 5010     
#define inf 2000000000     
     
long a[WM];     
int v[WM], c[WM];     
int g, w;     
     
int main()     
{     
    freopen("energii.in","r",stdin);     
    freopen("energii.out","w",stdout);     
    scanf("%d", &g);     
    scanf("%d", &w);     
    for (int i=1; i<=g; ++i)     
    scanf("%d%d", &v[i], &c[i]);     
    for (int i=1; i<=w; ++i)     
    a[i]=inf;     
    a[0]=0;     
    long min=inf;     
    for (int i=1; i<=g; ++i)     
    {       
        for (int j=w; j>=1; --j)       
        {       
            if (j+v[i]<w && a[j+v[i]]>a[j]+c[i]) a[j+v[i]]=a[j]+c[i];       
            if (j+v[i]>=w && a[j]+c[i]<min) min=a[j]+c[i];       
        }       
        if (v[i]>=w && c[i]<min) min=c[i];       
        if (v[i]<w && c[i]<a[v[i]]) a[v[i]]=c[i];       
    }       
    if (min==inf) printf("-1\n");     
    else printf("%ld\n", min);     
    fclose(stdin);     
    fclose(stdout);     
     
    return 0;     
}