Cod sursa(job #644340)

Utilizator Coman95coman cosmin Coman95 Data 6 decembrie 2011 09:10:41
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <fstream>
using namespace std;

#define MAX_N 1002
#define MAX_W 10002
#define INF 0x3f3f3f3f

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

void Read();
void Knapsack();
void Write();

int n;
int S;
int g[MAX_N], v[MAX_W];  // energia produsa, costul repornirii 
int c[MAX_W]; 
        
int main()
{
	Read();	
	Knapsack();
	Write();
	
	fin.close();
	fout.close();
} 

void Read()
{
	fin >> n >> S;
	for ( int i = 1; i <= n; ++i )
		fin >> g[i] >> v[i];
}

void Knapsack()
{
	for ( int i = 0; i <= MAX_W; ++i )
		c[i] = INF;	
	c[0] = 0;
	for ( int i = 1; i <= n; ++i )
		for ( int j = S; j >= 0; --j )
			if ( c[j] != INF && c[j+g[i]] > c[j] + v[i] )
				c[j+g[i]] = c[j] + v[i]; 
}

void Write()
{
	int sol = INF;
	int minim = INF;
	for ( int j = S; j <= MAX_W; ++j )
		if ( c[j] != INF && c[j] < minim )
			minim = c[sol = j];
	if ( sol != INF )
		fout << c[sol] << '\n';
	else
		fout << "-1\n";

}