Cod sursa(job #333567)

Utilizator cvicentiuCiorbaru Vicentiu Marian cvicentiu Data 23 iulie 2009 11:30:42
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <fstream>
#define MaxG 1001
#define MaxW 5001
using namespace std;

fstream fin ("energii.in", ios::in);
fstream fout("energii.out", ios::out);
int g, w, m[3][MaxG];
int A[MaxW], minim;
bool uz[MaxW][MaxG];

int temp_uz;
int main(){
	
	fin>>g;
	fin>>w;
	for (int i = 1; i <= g; ++ i)
		fin >> m[1][i] >> m[2][i];
	A[0] = 0;
	for (int i = 1; i <= w; ++ i){
		temp_uz = 0;
		for (int j = 1; j <= g; ++ j){
			if (A[i] != 0 && m[1][j] <= i &&  A[i] > A[ i - m[1][j] ] + m[2][j] && uz[ i - m[1][j] ][ j ] == false){
				temp_uz = j;	
				A[i] = A[ i - m[1][j] ] + m[2][j];
			}
			else if (m[1][j] == i){ 
				A[i] = m[2][j];
				temp_uz = j;
			}
			else if (m[1][j] < i && A[i - m[1][j]] != 0 && uz[ i - m[1][j] ][ j ] == false) {
				A[i] = A[i - m[1][j] ] + m[2][j];
				temp_uz = j;
			};
		};
		if (temp_uz != 0 && m[1][temp_uz] != i)
			for (int j = 1; j <= g; ++ j)
				uz[i][j] = uz[i - temp_uz][j];
		if (temp_uz != 0) uz[i][temp_uz] = true;
	};

	if (A[w] == 0)
		fout<<"-1";
	else fout<<A[w];
			

						
			

	
};