Pagini recente » Cod sursa (job #308126) | Cod sursa (job #1632427) | Cod sursa (job #2611187) | Cod sursa (job #93142) | Cod sursa (job #250496)
Cod sursa(job #250496)
#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])
if(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) // 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
if(max < j+a[i]) 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;
}