Cod sursa(job #107818)

Utilizator a7893Nae Mihai a7893 Data 20 noiembrie 2007 15:09:08
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.65 kb
#include<stdio.h>
#define INF 1000000000
#define N 1000
int n,gmax,gr[N],c[N],cmax[N];
void read()
{
	int i; 
	scanf("%d%d",&n,&gmax);
	for(i=1;i<=n;i++)
		scanf("%d%d",&gr[i],&c[i]);
}
void dinamica()
{
	int i,j,min;
	for(i=1;i<=N;i++)
		cmax[i]=INF;
	min=INF;
	for(i=1;i<=n;i++)
		for(j=gmax;j>=0;j--)
			if(cmax[j]<INF)
			{
				if(j+gr[i]>=gmax&&cmax[j]+c[i]<min)
					min=cmax[j]+c[i];
				if(j+gr[i]<=gmax&&cmax[j]+c[i]<cmax[j+gr[i]])
					cmax[j+gr[i]]=cmax[j]+c[i];
			}		
	printf("%d\n",min!=INF?min:-1);
}
int main()
{
	freopen("energii.in","r",stdin);
	freopen("energii.out","w",stdout);
	read();
	dinamica();
	return 0;
}