Cod sursa(job #1049324)

Utilizator ionutmodoModoranu Ionut-Vlad ionutmodo Data 7 decembrie 2013 10:38:10
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <fstream>
#define NMAX 1001
#define WMAX 5001
#define oo 2000000000
using namespace std;

int N, W, energTotal;
int energ[NMAX], cost[NMAX];
int d[NMAX][WMAX];

void Read()
{
	ifstream fin("energii.in");
	fin >> N >> W;
	for(int i = 1; i <= N; i++)
	{
		fin >> energ[i] >> cost[i];
		energTotal += energ[i];
	}
	fin.close();
}

void Initializare()
{
	for(int i = 0; i <= N; i++)
		for(int j = 1; j <= W; j++)
			d[i][j] = oo;
}

inline int Min(int x, int y)
{
	return (x <= y) ? x : y;
}

void Solve()
{
	Initializare();
	
	for(int i = 1; i <= N; i++)
	{
		for(int e = 1; e <= W; e++)
		{
			d[i][e] = Min(d[i-1][e], cost[i]);
			
			if(energ[i] <= W)
			{
				int p = W - energ[i];
				d[i][e] = Min(d[i-1][e], cost[i] + d[i-1][p]);
			}
		}
	}
	
	int sol = d[N][W];	
	ofstream fout("energii.out");
	if(sol == oo)
		fout << "-1\n";
	else
		fout << sol << "\n";
	fout.close();
}

int main ()
{
	Read();
	Solve();
	return 0;
}