Cod sursa(job #333914)

Utilizator rumburakrumburak rumburak Data 24 iulie 2009 16:25:57
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include<cstdio>

const int N = (1<<10);
const int W = (1<<13);
const int oo = (1<<27);

int n,w,e[N],c[N],cost[W];

void citire()
{
	scanf("%d%d",&n,&w);
	for(int i=1;i<=n;++i)
		scanf("%d%d",&e[i],&c[i]);
}

void rucsac()
{
	int i,j;
	for(j=1;j<=w;++j)
		cost[j]=oo;
	for(i=1;i<=n;++i)
	{
		for(j=w-1;j;--j)
		{
			if(j+e[i]>=w)
			{
				if(cost[j]+c[i]<cost[w])
					cost[w]=cost[j]+c[i];
				continue;
			}
			if(cost[j]+c[i] < cost[j+e[i]])
				cost[j+e[i]]=cost[j]+c[i];
		}
		if(e[i]>=w && c[i]<cost[w])
		{
			cost[w]=c[i];
			continue;
		}
		if(c[i]<cost[e[i]])
			cost[e[i]]=c[i];
	}
	if(cost[w]==oo)
		printf("-1\n");
	else
		printf("%d\n",cost[w]);
}

int main()
{
	freopen("energii.in","r",stdin);
	freopen("energii.out","w",stdout);
	citire();
	rucsac();
	return 0;
}