Cod sursa(job #705715)

Utilizator IronWingVlad Paunescu IronWing Data 4 martie 2012 20:16:12
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <stdio.h>
#include <climits>
#define MAX_GEN 1002
#define MAX_EN 5002
#define FOR(i, a, b) for (i = a; i <= b; ++i)

inline int min(int a, int b){
	return a < b? a : b;
}

int main(){	
	freopen("energii.in","r", stdin);
	freopen("energii.out","w", stdout);
	int g, w, eg[MAX_GEN], cg[MAX_GEN], **e, i, j;
	scanf("%d%d", &g, &w);
	FOR(i, 1, g){
		scanf("%d %d", eg + i, cg + i);
	}
	fclose(stdin);
	/* allocate the 2D e array */
	e = new int*[g+1];
	FOR(i,0,g){
		e[i] = new int[w+1];
	}

	/* compute the minimum cost in matrix e[i][j],
	the minimum cost of choosing from generators 1 to i, with a minimum energy requirement of j 
	*/
	FOR(j,0,w){
		e[0][j] = -1;
	}
	FOR(i,0, g){
		e[i][0] = -1;
	}
	FOR(i, 1, g){
		FOR(j,1,w){
			if(j-eg[i] >= 0){
				e[i][j] = min(e[i-1][j], e[i-1][j-eg[i]] + cg[i]);
			}
			else {
				e[i][j] = e[i-1][j];
			}
		}
	}
	printf("%d", e[g][w]);
	fclose(stdout);
	/* deallocate e 2D array */
	FOR(i, 0, g){
		delete[] e[i];
	}
	delete[] e;
	return 0;
}