Cod sursa(job #250504)

Utilizator razyelxrazyelx razyelx Data 31 ianuarie 2009 00:36:10
Problema Energii Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <fstream.h>
int n,a[1002],p[10000000],c[1002],E;
char e[10000000];
long long min,max;
ifstream in("energii.in");
ofstream out("energii.out");


int main(){
     int i,j;

     in>>n>>E;
     for(i=1;i<=n;i++)
	   in>>a[i]>>c[i];

     e[0] = -1;
     max  = 0;
     min  = 20000000;
     for(i=1;i<=n;i++)
	for(j=max;j>=0;j--)
	   if(e[j] && (p[j+a[i]] > p[j] + c[i] || !p[j+a[i]])){  // Se salveaza doar daca exista deja salvata
								 // o valoare mai mare ca cost decat curenta, sau valoarea salvata este 0
		       if((j+a[i] <= E || p[j]+c[i] <= min) && max < j+a[i])       // Se salveaza un nou maxim doar daca energia maxima calculata e mai mica decat
								 // cea de care este nevoie sau noul cost este mai mic decat costul minim de pana acuma
			  max = j+a[i];

		       e[j+a[i]] = 1;
		       p[j+a[i]] = p[j] + c[i];

		       if(p[j+a[i]]<min && j+a[i] >= E) min = p[j+a[i]];
		     }


     if(max >= E) out<<min;

     else out<<"-1";

     return 0;
}