Cod sursa(job #849330)

Utilizator SilviussMezei Silviu Silviuss Data 6 ianuarie 2013 19:55:49
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin("energii.in");
ofstream fout("energii.out");

short eg[5000],cg[5000];

short min(short a, short b)
{
	if(a>b)
		return b;
	else
		return a;
}

/*short f(short i,short w)
{
	if(i==1)
	{
		if(w - eg[0] > 0)
			return 10001;
		else
			return cg[0];
	}
	else
	{
		if(w <= 0){
			return 0;
		}
		if(w - eg[i-1] <= 0){
			return cg[i-1];
		}
		
		short s1=f(i-1,w-eg[i-1]);
		short s2=f(i-1,w);
		
		if(s1 == 10001){
			return s2;
		}
		s1+=cg[i-1];
		if(s2 == 10001){
			return s1;
		}
		
		cout << i <<" g -> " << w << " " << s1 << " " << s2<<endl; 
		return min(s1,s2);
	}
}
*/
int main ()
{
	short g,w,a[1001][502],i,j;
	fin>>g>>w;
	for(i=1;i<=g;i++){
		
		fin>>eg[i]>>cg[i];
	}
	for(i=0;i<g;i++)
	{
		for(j=1;j<=w;j++)
		{
			a[i][j]=10001;
		}
	}

	for(i=1;i<=g;i++)
	{
		for(j=0;j<=w;j++)
		{
			if(eg[i]<=j)
			{
				a[i][j]=min(a[i-1][j],a[i-1][j-eg[i]]+cg[i]);
			}
			else
				a[i][j]=min(a[i-1][j],cg[i]);
		}
	}
	if(a[g][w]==10001)
		fout<<-1;
	else
		fout<<a[g][w];
}