Cod sursa(job #1605454)

Utilizator aimrdlAndrei mrdl aimrdl Data 19 februarie 2016 00:24:38
Problema Energii Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <iostream>
#include <string.h>
#include <algorithm>

using namespace std;

struct gen {
	int e;
	int c;
};

gen best[5010];

int g, w;

int main (void) {
	freopen("energii.in", "r", stdin);
	freopen("energii.out", "w", stdout);
	
	scanf("%d", &g);
	scanf("%d", &w);
	
	/*init
	for (int i = 1; i <= w; ++i) {
		best[i].e = 0;
		best[i].c = 9999999;
	}*/
	
	//read
	gen elem;
	int m = 999999;
	for (int j = 0; j < g; ++j) {
		scanf("%d %d", &elem.e, &elem.c);
		if (elem.e >= w) {
			m = min(m, elem.c);
		} else {
			for (int i = w; i >=1 ; --i) {
				if (best[i].e < i) {
					best[i].e += elem.e;
					best[i].c += elem.c;
				} else {
					best[i].c = min(best[i].c, best[i - elem.e].c + elem.c);
					best[i].c = min(best[i].c, best[best[i].e - elem.e].c + elem.c);
				}
			}
		}
	}
	
	if (m == 999999 && best[w].e < w) {
		printf("-1");
	} else {
		printf("%d", min(best[w].c, m));
	}
	
	return 0;
}