Cod sursa(job #202191)

Utilizator piroslPiros Lucian pirosl Data 6 august 2008 18:30:44
Problema Energii Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<fstream>
#include<iostream>
using namespace std;

#define inf 50000000

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

long add(long a, long b) 
{
	if(a == inf || b == inf)
		return inf;
	return a+b;
}


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];
	}

	costuri[0] = 0;
	for(long i = 1; i<=max; ++i)
		costuri[i] = inf;

	long min = inf;
	for(int j=0;j<g;++j)
	{
		for(long i = max; i>=1; --i)
		{
			if(i >= e[j]) 
			{
				long sum = add(costuri[i-e[j]],c[j]);
				if(costuri[i] > sum) 
				{
					costuri[i] = sum;
					if(i>=w) 
					{
						if(costuri[i] < min)
							min = costuri[i];
					}
				}
			}
		}
	}

	if(min == inf)
		cout << -1 << endl;
	else
		cout << min << endl;
	
	return 0;
}