Cod sursa(job #92191)

Utilizator algoritmarOvidiu Andrei algoritmar Data 14 octombrie 2007 13:49:46
Problema Energii Scor 5
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <fstream>
#include <iostream>
using namespace std;

#define N_MAX 1001
#define W_MAX 5001
#define FIN "energii.in"
#define FOUT "energii.out"

int g,w,cmin = W_MAX,a[N_MAX],b[N_MAX],s,c,i,j,k,t;

int main()
{
	ifstream fin(FIN);
	ofstream fout(FOUT);
	fin >> g >> w;
	for(i = 0; i < g; ++i){
		fin >> a[i] >> b[i];
	}
	if(a[0] >= w)
		cmin = b[0];
	
	for(i = 0; i < g; ++i)
		for(j = i+1; j < g; ++j)
			if(a[i] > a[j]){
				k = a[i],a[i] = a[j],a[j] = k;
				t = b[i],b[i] = b[j],b[j] = t;
			}
	//for(i = 0; i < g; ++i)
	//	cout << a[i] << " " << b[i] << endl;

	for(i = 0; i < g; ++i,s = c = 0)
	{	
		s+=a[i], c+=b[i],k = 1;
		while(i+k <= g-1){
			for(j = i+k; j < g; ++j)
			{			
				if( a[j] >= w ){
					if(b[j] < cmin)
						cmin = b[j];
				}
				else{ 
					c += b[j];s += a[j];
					if(s >= w){
						if(c < cmin)
							cmin = c,s = c = 0;
					}
					else
						if(i == g-2 && j == g-1 && cmin == W_MAX)
							cmin = -1;
				}
			}
			++k,s = a[i],c = b[i];
		}
	}	
	fout << cmin;
	return 0;
}