Cod sursa(job #574363)

Utilizator cdascaluDascalu Cristian cdascalu Data 7 aprilie 2011 09:20:10
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include<fstream>
#include<vector>
#include<bitset>
#define MAX 14002
#define INF 0x3f3f3f
using namespace std;
int sol[MAX],W,G,minim = INF;
struct gen
{
	int c,e;
}v[1002];
bitset<1002> viz;
void read()
{
	ifstream f("energii.in");
	f>>G>>W;
	int i;
	for(i=1;i<=G;++i)
		f>>v[i].e>>v[i].c;
	f.close();
}
int cmp(gen a,gen b)
{
	return (a.c<b.c);
}
int main()
{
	read();
	sort(v+1,v+1+G,cmp);
	fill(sol+1,sol+MAX,INF);
	sol[0] = 0;
	int i,j;
	for(i=1;i<=G;++i)
	{
		for(j=0;j<W;++j)
			if(!viz[j] && sol[j]+v[i].c<sol[j+v[i].e])
			{
				sol[j+v[i].e] = sol[j]+v[i].c;
				viz[j+v[i].e] = 1;
				if(j+v[i].e>=W && sol[j+v[i].e] < minim)
					minim = sol[j+v[i].e];
			}
		viz.reset();
	}
	if(minim == INF)minim = -1;
	ofstream g("energii.out");
	g<<minim<<"\n";
	g.close();
	return 0;
}