Cod sursa(job #108545)

Utilizator FlorianFlorian Marcu Florian Data 22 noiembrie 2007 21:21:03
Problema Energii Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<stdio.h>
#include<stdlib.h>
#include<values.h>
#define S 100000
int s[100000],w,n,cost[100000];
typedef struct{int a,c;}Energie;
Energie x[2005];
int cmp(const void*a,const void*b)
	{
	return *(int*)a-*(int*)b;
	}
FILE*f=fopen("energii.in","r");
FILE*g=fopen("energii.out","w");
int main()
	{
	long k,i,j,m;
	fscanf(f,"%d %d",&n,&w);
	s[0]=1;
	for(i=1;i<=n;++i) fscanf(f,"%d %d",&x[i].a,&x[i].c);
	for(i=1;i<=S;++i) cost[i]=MAXINT;
	qsort(x,n+1,sizeof(x[1]),cmp);
	for(i=1;i<=n;++i)
		{
		for(j=S;j>=0;--j)
			if(s[j]==1)
				{
				s[j+x[i].a]=1;
				if(cost[j+x[i].a]>cost[j]+x[i].c)
					cost[j+x[i].a]=cost[j]+x[i].c;
				}
		}
	if(s[w]==1) i=w;
	else
		{
		int ok=1;
		i=w+1;
		while(s[i]==MAXINT&&i<=S)
			{
			i++;
			if(i!=MAXINT) { ok=0;break;     }
			}
		if(ok==1) {fprintf(g,"-1");return 0; }
		}
	fprintf(g,"%d",cost[i]);
	return 0;
	}