Cod sursa(job #386119)

Utilizator horiama1Mania Horia horiama1 Data 24 ianuarie 2010 09:49:50
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include<stdio.h>
min (int a, int b)
{
 if(a == 0 || a > b)
	return b;
 return a;
}


int v[6000], c[1000], p[1000], r[1000];
int main()
{
	freopen("energii.in", "r", stdin);
	freopen("energii.out", "w", stdout);
	int i, j, g, w, s = 0, k = 0, z = 0;
	scanf("%d%d", &g, &w);
	for(i = 0; i < g; i++)
	{
		scanf("%d%d", &p[i], &c[i]);
		s += p[i];
	}
	if(s < w)
		printf("-1");
	else
	{       for(j = 0; j < g; j++)
			for(i = w; i>= 0; i--)
			{
				if(v[i] != 0 || i == 0)
					if(i + p[j] >= w)
					{
						r[k] = v[i] + c[j];
						k++;
					}
					else
						v[i+p[j]] = min(v[i + p[j]], v[i] + c[j]);
			}
		for(i = 0; i< k; i++)
			z = min(z, r[i]);
		printf("%d", z);
	}

	return 0;

}