Cod sursa(job #202194)

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

#define inf 10000001

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


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