Cod sursa(job #107819)

Utilizator a7893Nae Mihai a7893 Data 20 noiembrie 2007 15:10:52
Problema Energii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 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;
}
*/
#include<stdio.h>
#define N 10000
#define INF 1000000000
int g,w,a[N];
struct vec{
	int e,c;
}v[N];
void read()
{
	int i;
	scanf("%d%d",&g,&w);
	for(i=0;i<g;i++)
		scanf("%d%d",&v[i].e,&v[i].c);
}
void solve()
{
	int i,min=INF,j;
	for(i=1;i<N;i++)
		a[i]=INF;
	for(i=0;i<g;++i)
		for(j=w;j>=0;j--)
			if(a[j]<INF)
			{
				if(j+v[i].e>=w&&a[j]+v[i].c<min)
					min=a[j]+v[i].c;
				if(j+v[i].e<w&&a[j]+v[i].c<a[j+v[i].e])
					a[j+v[i].e]=a[j]+v[i].c;
			}
	printf("%d\n",min!=INF?min:-1);
}
int main()
{
	freopen("energii.in","r",stdin);
	freopen("energii.out","w",stdout);
	read();
	solve();
	return 0;
}