Cod sursa(job #575140)

Utilizator brainwashed20Alexandru Gherghe brainwashed20 Data 7 aprilie 2011 22:48:30
Problema Energii Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<fstream>
#include<algorithm>
#include<vector>

using namespace std;

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

struct generator {
	int energ, cost;
};
vector<generator> A;
vector<int> D;
vector<bool> viz;
int G, W, sol=1<<30;

int cmp(generator a, generator b) {
	return a.cost < b.cost;
}

int main() {
	int i, j;
	
	f>>G>>W; 
	A.resize(G+1); D.resize(15000); viz.resize(15000);
	sort(A.begin()+1,A.end(),cmp);
	fill(D.begin(),D.end(),1<<30); 
	for(i=1; i<=G; i++)
		f>>A[i].energ>>A[i].cost;
	D[0]=0;
	for(i=1; i<=G; i++) {
		fill(viz.begin(),viz.end(),false);
		for(j=0; j<W; j++)
			if(!viz[j] && D[j+A[i].energ]>D[j]+A[i].cost) {
				D[j+A[i].energ]=D[j]+A[i].cost;
				viz[j+A[i].energ]=1;
				if(j+A[i].energ>=W && D[j+A[i].energ]<sol)
					sol=D[j+A[i].energ];
			}
	}
	if(sol==1<<30)
		g<<-1<<"\n";
	else
		g<<sol<<"\n";
	
	f.close(); g.close();
	
	return 0;
}