Cod sursa(job #1223973)

Utilizator catalincraciunCraciun Catalin catalincraciun Data 29 august 2014 12:15:08
Problema Energii Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
// Craciun Catalin
//  Energii
//   Infoarena
#include <iostream>
#include <cstring>
#include <climits>
#include <fstream>

struct obj {
	
	int val, weight;
};

using namespace std;

ifstream f("energii.in");
ofstream g("energii.out");

#define GMax 20005
#define INF 0x3f3f3f3
#define min(a,b) ((a<b)?(a):(b))

int E[GMax];
int C[GMax];
int A[GMax];
int n,necessaryE;
long long sum=0;
long long minim = 0;

void knapstack() {
	
	for (int i=1;i<=GMax-1;i++) {
		A[i] = INF;
	}
	
	for (int i=1;i<=n;i++) {
		for (int j=necessaryE; j>= 0;j--) {
			if (A[j] != INF) {
				if (A[j] + C[i] < A[j+E[i]])
					A[j+E[i]] = A[j] + C[i];
			}
		}
	}
	
	minim = INF;
	for (long long i=necessaryE; i<= sum;i++)
		minim = min(minim, A[i]);
}

int main() {
	
	f>>n>>necessaryE;
	for (int i=1;i<=n;i++) {
		f>>E[i]>>C[i];
		sum+=E[i];
	}
	f.close();

	if (sum < necessaryE)
		g<<-1<<'\n';
	else {
		knapstack();
		g<<minim<<'\n';
	}

	g.close();
	
	return 0;
}