Cod sursa(job #1336537)

Utilizator valentin50517Vozian Valentin valentin50517 Data 7 februarie 2015 20:56:11
Problema Energii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <fstream>
using namespace std;

int G, W, E[1003], C[1003], DP[2][10010], h, N, max = 0;
bool u = true;
ifstream fin("energii.in");
ofstream fout("energii.out");

int min(int a, int b){
	if (a == 0) return b;
	else if (b == 0) return a;
	else if (a > b) return b; else return a;
}

int energii(){
	fin >> G >> W;
	for (int i = 1; i <= G; i++){
		fin >> E[i] >> C[i];
		max = max + E[i];
	}
	if (max < W) return 0;
	for (int i = 1; i <= G; i++){
		h += E[i];
		if (h < W) N = h; else N = W;
		for (int j = 1; j <= N; j++){
			if (E[i] < j){
				DP[u][j] = min(DP[!u][j - E[i]] + C[i], DP[!u][j]);
			}
			else if (DP[!u][j] == 0) DP[u][j] = C[i];
			else DP[u][j] = min(C[i], DP[!u][j]);
		}
		u = !u;
	}
	return DP[!u][W];
}

int main(){
	if (energii() == 0) fout << -1; else fout << DP[!u][W];

	return 0;
}