Cod sursa(job #202193)

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

#define inf 10000001

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

int add(int a, int 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<=2*w; ++i)
		costuri[i] = inf;

	long min = inf;
	for(int j=0;j<g;++j)
	{
		for(long i = 2*w; i>=1; --i)
		{
			if(i >= e[j]) 
			{
				long sum = (costuri[i-e[j]] == inf)?inf: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;
}