Cod sursa(job #222434)

Utilizator Alexa_ioana_14Antoche Ioana Alexandra Alexa_ioana_14 Data 22 noiembrie 2008 15:59:42
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include<stdio.h>
#define N 1002
#define INF 2000000000
int e[N],c[N],v[5*N],n,w;
void citire()
{
	scanf("%d%d",&n,&w);
	for (int i=1; i<=n;++i)
		scanf("%d%d",&e[i],&c[i]);
}
int rucsac ()
{
	for (int j=1; j<=w; ++j)
		v[j]=INF;//initial consider costurile infinite (pt energii care nu pot fi obtinute)
	for (int i=1; i<=n; ++i)//iau fiecare generator in parte
		for (int j=w-1; j>=0; --j)//caut energii care pot fi obtinute cu gen 1,2..i-1
			if (v[j]!=INF)//daca energia j poate fi obtinuta cu generatoarele dinainte (1,2..i-1)
			{
				if (j+e[i]>=w && v[j]+c[i]<v[w])//daca prin adaugarea gen i obtin energie>=w (suficienta)
					v[w]=v[j]+c[i];//daca am un cost mai mic pt pornirea centralei, il retin
				if (j+e[i]<w && v[j]+c[i]<v[j+e[i]])//pt cazul in care obtin energie<w cu cost mai bun
					v[j+e[i]]=v[j]+c[i];
			}
	if(v[w]==INF)
		return -1;
	return v[w];
}
int main()
{
	freopen("energii.in","r",stdin);
	freopen("energii.out","w",stdout);
	citire();
	printf("%d\n",rucsac());
	return 0;
}