Cod sursa(job #53454)

Utilizator c_sebiSebastian Crisan c_sebi Data 22 aprilie 2007 10:43:53
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <stdio.h>
#define maxs 50
#define maxn 100

int CMin[maxs], uz[maxs][maxn], c[maxn], g[maxn], S, n;

void read()
{
	int i;
	FILE *f=fopen ("energii.in", "r");
	fscanf (f, "%d", &n);
	fscanf (f, "%d", &S);
	for (i=0; i<n; ++i)
		fscanf (f, "%d %d", &g[i], &c[i]);
	fclose(f);
}


int main()
{
	int i, j, k, jmin;
	read();
	for (i=1; i<=S; ++i)
		{
			CMin[i]=10001;
			for (j=0; j<n; ++j)
			  {if (g[j]<=i)
					if (CMin[i-g[j]]+c[j] < CMin[i] && !uz[i-g[j]][j])
						{
							CMin[i] = CMin[i-g[j]]+c[j];
							jmin=j;
						}
					else;
				else if (c[j]<CMin[i]) {CMin[i]=c[j]; jmin=j; }
			  }
			 if (g[jmin]<=i) for (k=0; k<n; ++k) uz[i][k]=uz[i-g[jmin]][k];
			 uz[i][jmin]=1;
		}
	FILE *g=fopen ("energii.out", "w");
	fprintf (g, "%d\n", CMin[S]);
	fclose(g);
	return 0;
}