Cod sursa(job #1324020)

Utilizator taigi100Cazacu Robert taigi100 Data 21 ianuarie 2015 18:34:47
Problema Energii Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
/*
	Keep It Simple!
*/

#include <fstream>

#define minV(a,b) ((a)<(b)?(a):(b))

using namespace std;

const int kMax_N = 1005;
const int kMax_W = 5005;
const int kMax_S = 10055025;

int g, w,sum;
int eg[kMax_N], cg[kMax_N];
int dp[kMax_S];

void ReadData()
{
	ifstream fin("energii.in");
	fin >> g >> w;
	for (int i = 1; i <= g; ++i)
	{
		fin >> eg[i] >> cg[i];
		sum += eg[i];
	}
	fin.close();
}

void PrintResult(int x)
{
	ofstream fout("energii.out");
	fout << x;
	fout.close();
}

void Solve()
{
	ReadData();
	if (sum < w) PrintResult(-1);
	for (int i = 1; i <= sum; ++i) dp[i] = 1 << 28;
	for (int i = 1; i <= g; ++i)
		for (int j = w; j >= 0; --j)
		{
		if (j + eg[i] > w)
			dp[w] = minV(dp[w], dp[j] + cg[i]);
		else
			dp[j + eg[i]] = minV(dp[j + eg[i]], dp[j] + cg[i]);
		}

	PrintResult(dp[w]);
}

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