Cod sursa(job #489690)

Utilizator bora_marianBora marian bora_marian Data 3 octombrie 2010 12:44:52
Problema Energii Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 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 && c[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;
	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+e[i]]=cost[j]+c[i];
					else
						if(cost[j]+c[i]<cost[j+e[i]])
						    cost[j+e[i]]=cost[j]+c[i];
				}
			}
}