Cod sursa(job #886320)

Utilizator GManiakGhenea Catalin GManiak Data 22 februarie 2013 19:38:09
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("energii.in");
ofstream h("energii.out");
struct nod
{
	int e;
	int c;
}v[1000];
int w,cost[10001],g,s;
void rucsac()
{
	int i,j;
	for(i=0;i<g;i++)
	{
		for(j=w-1;j>=0;j--)
			if(cost[j]!=-1)
				if(cost[j]+v[i].c<cost[j+v[i].e] || cost[j+v[i].e]==-1)
					cost[j+v[i].e]=cost[j]+v[i].c;
		if(cost[v[i].e]>v[i].c || cost[v[i].e]==-1)
			cost[v[i].e]=v[i].c;
	}
}
void afis()
{
	int i,min=10001;
	for(i=w;i<=s;i++)
		if(min>cost[i] && cost[i]!=-1)
			min=cost[i];
	h<<min;
}
void pop()
{
	for(int i=0;i<=s;i++)
		cost[i]=-1;
}
int main()
{
	int i;
	f>>g>>w;
	for(i=0;i<g;i++)
	{
		f>>v[i].e>>v[i].c;
		s+=v[i].e;
	}
	if(s<w)
	{
		h<<-1;
		return 0;
	}
	else if(s>10000)
		 s=10000;
	pop();
	rucsac();
	afis();
	return 0;
}