Cod sursa(job #557351)

Utilizator lau08Laurentiu Capatina lau08 Data 16 martie 2011 16:40:56
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include<stdio.h>
#define GMax 1002
#define WMax 5002
FILE *f=fopen("energii.in","r");
FILE *g=fopen("energii.out","w");
int G,W,C[WMax][GMax];
struct generator{int e,c;};
generator A[GMax];

int min(int x,int y)
{if(x < y && x) return x;
else return y;
}

void Completare(int i,int j)
{int k;
k=i-A[j].e;
if(k>=1)
	if(C[k][j-1]) 
		{C[i][j] = min(C[i][j-1],A[j].c+C[k][j-1]); return;}
	
if(k==0) 
	{C[i][j] = min(C[i][j-1],A[j].c); return;}
C[i][j] = C[i][j-1];
}

void Read()
{int i;
fscanf(f,"%d %d",&G,&W);
for(i=1;i<=G;i++)
	fscanf(f,"%d %d",&A[i].e,&A[i].c);
}

int main()
{int s=0,i,j,aux;
Read();
for(i=1;i<=W;i++)
	C[i][1] = 0;
C[A[1].e][1] = A[1].c;
for(i=1;i<=G;i++)
	s+=A[i].e;
if(s < W) fprintf(g,"-1\n");
else
{
	i=1;
	while((!C[i-1][j-1] && i >= W && j-1!=G) || i<=W)
	{	
		for(j=2;j<=G;j++)
			Completare(i,j);
		i++;
	}
	fprintf(g,"%d\n",C[i-1][G]);
}
return 0;
}