Cod sursa(job #4383)

Utilizator MariusMarius Stroe Marius Data 3 ianuarie 2007 00:03:52
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <fstream>
using namespace std;


const int MaxN = 1001, MaxS = 5001;

int   N, S, v[MaxN], cost[MaxN];
int   c[MaxS];
int   Minim = 999999999;


void ReadData(void)
{
	ifstream fin("energii.in");

	fin >> N >> S;
	for (int k=1; k<=N; ++k)
		fin >> v[k] >> cost[k];

	fin.close();
}

int main(void)
{
	int i, j, k;

	ReadData();

	for (j=1; j<=S; ++j) c[j] = 1e9;
	c[0] = 0;

	for (i=1; i<=N; ++i)
		for (j=S; j>=0; --j)
			if (c[j] < 1e9)
			{
				if (j + v[i] > S)
					if (Minim > c[j] + cost[i])
						Minim = c[j] + cost[i];
				if (j + v[i] <= S)
					if (c[j + v[i]] > c[j] + cost[i])
						c[j + v[i]] = c[j] + cost[i];
			}

	ofstream fout("energii.out");

	if (c[S] == 1e9 && Minim == 999999999)
		fout << -1;
	else
		fout << (Minim < c[S] ? Minim : (c[S] == -1 ? Minim : c[S]));

	fout.close();

	return 0;
}