Cod sursa(job #1489323)

Utilizator al.mocanuAlexandru Mocanu al.mocanu Data 20 septembrie 2015 23:16:09
Problema Energii Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <stdio.h>
#define MAX1 1005
#define MAX2 6005
#define INF 1<<30
#define min(a, b) (a < b ? a : b)

typedef struct{
	int e, c;
} gen;

int G, W, i, d[2][MAX2];
gen g[MAX1];

void rucsac();

int main(){
	freopen("energii.in", "r", stdin);
	freopen("energii.out", "w", stdout);
	scanf("%d%d", &G, &W);
	for(i = 1; i <= G; i++)
		scanf("%d%d", &g[i].e, &g[i].c);
	rucsac();
	printf("%d\n", d[G & 1][W] == INF ? -1 : d[G & 1][W]);
	return 0;
}

void rucsac(){
	int i, j;
	for(i = 0; i <= W; i++)
		d[0][i] = d[1][i] = INF;
	for(i = 0; i <= g[i].e; i++)
		d[1][i] = g[i].c;

	for(i = 2; i <= G; i++)
		for(j = 0; j <= W; j++){
			if(j - g[i].e < 0)
				d[i & 1][j] = min(d[(i - 1) & 1][j], g[i].c);
			else
				d[i & 1][j] = min(d[(i - 1) & 1][j], d[(i - 1) & 1][j - g[i].e] + g[i].c);
		}
}