Cod sursa(job #202027)

Utilizator piroslPiros Lucian pirosl Data 5 august 2008 17:30:21
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include<fstream>
#include<iostream>
using namespace std;

int g;
int w;
int e[1001];
int c[1001];
long costuri[10000001];

int main(void)
{
	freopen("energii.in", "r", stdin);
	freopen("energii.out", "w", stdout);
	cin >> g;
	cin >> w;
	long max = 0;
	for(int i=0;i<g;++i)
	{
		cin >> e[i] >> c[i];
		max += e[i];
	}

	memset(costuri, -1, sizeof(costuri));
	costuri[0] = 0;
	long min = 20000001;
	for(long i = 1; i<=max; ++i)
	{
		long min_c = 10000001;//costuri[i];
		int poz = -1;
		for(int j=0;j<g;++j)
		{
			if(e[j] <= i)
			{
				if(costuri[i-e[j]] > -1 && c[j] + costuri[i-e[j]] < min_c)
				{
					min_c = c[j] + costuri[i-e[j]];
					poz = j;
				}
			}
		}
		if(poz != -1)
		{
			costuri[i] = min_c;
			if(i>=w) 
			{
				if(costuri[i] < min)
					min = costuri[i];
			}	
			e[poz] = 20000001;
		}
	}
	
	if(min == 10000001)
		cout << -1 << endl;
	else
		cout << min << endl;

	return 0;
}