Cod sursa(job #462580)

Utilizator crushackPopescu Silviu crushack Data 11 iunie 2010 19:22:26
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <stdio.h>
#define Gmax 1001
#define Wmax 5001

int G,W,min=-1;
int a[Gmax][Wmax];
struct generator
{int e,c;} v[Gmax];

int Min(int a,int b)
{
	return (a>b) ? a : b;
}

void citire()
{
	int i;
	freopen("energii.in","r",stdin);
	scanf("%d%d",&G,&W);
	for (i=0;i<G;i++)
		scanf("%d%d",&v[i].e,&v[i].c);
	fclose(stdin);
}

int pd(int x,int s,int c)
{
	if (s<=0)
		return c;
	if (x>=0 && !a[x][s])
	{
		int ax=pd(x-1,s-v[x].e,c+v[x].c);
		int bx=pd(x-1,s,c);
		
		ax= (ax==-1) ? bx : ax;
		bx= (bx==-1) ? ax : bx;
		
		a[x][s]= Min(ax,bx);
		return a[x][s];
	}
	else if (x>=0)
		return a[x][s];
	return -1;
}


void scriere()
{
	freopen("energii.out","w",stdout);
	printf("%d\n",a[G-1][W]);
	fclose(stdout);
}

int main()
{
	citire();
	pd(G-1,W,0);
	scriere();
	return 0;
}