Cod sursa(job #93878)

Utilizator algoritmarOvidiu Andrei algoritmar Data 20 octombrie 2007 15:42:21
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <fstream>
#include <iostream>
using namespace std;

#define N_MAX 1001
#define W_MAX 5001
#define FIN "energii.in"
#define FOUT "energii.out"

ifstream fin(FIN);
ofstream fout(FOUT);

int g, w, cost[N_MAX], value[N_MAX];

void read_input() {
	fin >> g >> w;
	for (int i = 0; i < g; ++i){
		fin >> value[i] >> cost[i];
	}
}

int solve() {
	int m[W_MAX];
	int result = -1;
	memset(m, 0xFF, sizeof(m));
	m[0] = 0;
	for (int i = 0; i < g; ++i) {
		for (int j = w - 1; j >= 0; --j) {
			if (m[j] == -1) {
				continue;
			}

			int next = j + value[i];
			if (next >= w) {
				if (m[j] + cost[i] < result || result == -1) {
					result = m[j] + cost[i];
				}
			} else if (m[next] == -1 || m[next] > m[j] + cost[i]) {
				m[next] = m[j] + cost[i];
			}
		}
	}
	return result;
}

int main()
{
	read_input();
	fout  << solve() << endl;
	
	return 0;
}