Cod sursa(job #487050)

Utilizator bent_larsenSturzu Antonio-Gabriel bent_larsen Data 23 septembrie 2010 17:25:41
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<iostream>
#include<fstream>
#define lim 12000000
using namespace std;

const int nmax=1005;

inline int min(int a,int b)
{	
	return a<=b ? a:b;
}	

int main()
{
	int g,w,best1[5002],best2[5002];
	ifstream in("energii.in");
	ofstream out("energii.out");

	in>>g>>w;
	int e[nmax],cost[nmax];
	for(int i=0;i<g;i++)
		in>>e[i]>>cost[i];
	in.close();
	
	best1[0]=0;
	for(int i=1;i<=w;i++)
	{
		if(e[0]>=i)
			best1[i]=cost[0];
		else
			best1[i]=lim;
	}
	for(int i=1;i<g;i++)
	{
		for(int j=1;j<=w;j++)
		{
			best2[j]=lim;
			if(e[i]<=j)
				best2[j]=min(best1[j-e[i]]+cost[i],best1[j]);
			else
				best2[j]=min(cost[i],best1[j]);		
		}
		for(int i=1;i<=w;i++)
			best1[i]=best2[i];
	}
	if(best1[w]!=lim)
		out<<best1[w]<<endl;
	else
		out<<"-1\n"<<endl;
	out.close();
}