Cod sursa(job #490247)

Utilizator ChallengeMurtaza Alexandru Challenge Data 5 octombrie 2010 17:52:17
Problema Energii Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <fstream>

using namespace std;

const char InFile[]="energii.in";
const char OutFile[]="energii.out";
const int MaxN=10006000;
const int MAX=1<<30;

ifstream fin(InFile);
ofstream fout(OutFile);

int W,CGi,EGi,G,sol,marked[MaxN],cost[MaxN],csum;

int main()
{
	fin>>G>>W;
	cost[0]=0;
	marked[0]=1;
	for(register int i=0;i<G;++i)
	{
		fin>>EGi>>CGi;
		csum+=CGi;
		for(register int j=csum;j>=0;--j)
		{
			if(marked[j]==1)
			{
				if(marked[j+EGi]==1)
				{
					cost[j+EGi]=min(cost[j+EGi],cost[j]+CGi);
				}
				else
				{
					marked[j+EGi]=1;
					cost[j+EGi]=CGi+cost[j];
				}
			}
		}
	}
	fin.close();

	sol=MAX;
	for(register int i=W;i<=csum;++i)
	{
		if(marked[i]==1)
		{
			if(sol>cost[i])
			{
				sol=cost[i];
			}
		}
	}
	if(sol==MAX)
	{
		sol=-1;
	}
	fout<<sol;
	fout.close();
	return 0;
}