Cod sursa(job #140372)

Utilizator ScrazyRobert Szasz Scrazy Data 21 februarie 2008 20:16:55
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 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=0; j<=w; ++j)
	{
	    if (v[i]>=w && min>c[i]) min=c[i];
	    else if (v[i]+j<=w)
	    {
		if (a[v[i]+j]>a[j]+c[i]) a[v[i]+j]=a[j]+c[i];
	    } 
	    if (j+v[i]>=w && min>a[j]+c[i]) min=a[j]+c[i];
	}

    if (min==inf) printf("-1\n");
    else printf("%ld\n", min);

    fclose(stdin);
    fclose(stdout);

    return 0;
}