Cod sursa(job #489698)

Utilizator bora_marianBora marian bora_marian Data 3 octombrie 2010 12:54:16
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<fstream>
using namespace std;
int e[1009],c[1009],g,w,cost[5009];
int minim=1000000000;
void solve();
int main()
{
	ifstream fin("energii.in");
	ofstream fout("energii.out");
	fin>>g>>w;
	int i;
	for(i=1;i<=g;i++)
		fin>>e[i]>>c[i];
	solve();
	if(minim==1000000000 && cost[w]==-1)
		fout<<"-1";
	else
		if(cost[w]==-1)
			fout<<minim;
		else
			if(minim==1000000000)
				fout<<cost[w];
			else
				fout<<(minim<cost[w]?minim:cost[w]);
	return 0;
}
void solve()
{
	int i,j;
	cost[0]=0;
	for(i=1;i<=w;i++)
		cost[i]=-1;
	for(i=1;i<=g;i++)
		for(j=w;j>=0;j--)
			if(cost[j]!=-1)
			{	
				if(j+e[i]>w)
					if(cost[j]+c[i]<minim)
						minim=cost[j]+c[i];
				if(j+e[i]<=w)
					if(cost[j+e[i]]==-1 || cost[j]+c[i]<cost[j+e[i]])
					    cost[j+e[i]]=cost[j]+c[i];
					
			}
}