Pagini recente » Cod sursa (job #1010309) | Cod sursa (job #455968) | Cod sursa (job #2059919) | Cod sursa (job #2045702) | Cod sursa (job #4302)
Cod sursa(job #4302)
#include<fstream.h>
#include<iomanip.h>
fstream fin("energii.in",ios::in);
fstream fout("energii.out",ios::out);
long long g,w,c[11000],e[11000],v[11000],i,j,ct=0,et=0,min;
int main(){
fin>>g>>w;min=2000;
for(i=1;i<=g;i++){fin>>e[i]>>c[i];ct+=c[i];et+=e[i];if (e[i]<min) min=e[i];}
//daca nu am energia necesara scriu -1
if (et<w) {fout<<-1; fin.close();fout.close();return 0;}
if (et-min<w) {fout<<ct; fin.close();fout.close();return 0;}
for(i=1;i<=g;i++){
//daca energia prod de generatorul i este mai mare decat energia de pornire
if (e[i]>=w) if (c[i]<ct) ct=c[i];
else;
else{
for(j=w-1;j>=1;j--)
//daca pot obtine energia j
if (v[j]){
if (e[i]+j>=w)
if (c[i]+v[j]<ct) ct=c[i]+v[j];//actualizez ct
else;
else
//daca abia acum am obtinut energia e[i]+j atunci retin costul
if (v[j+e[i]]==0) v[j+e[i]]=v[j]+c[i];
//altfel daca am cost mai mic actualizez
else if (v[j]+c[i]<v[j+e[i]]) v[j+e[i]]=v[j]+c[i];
else;
}
//actualizez energia e[i]
if ((v[e[i]]==0)||(c[i]<v[e[i]])) v[e[i]]=c[i];
}
}
//for(i=1;i<=w-1;i++) fout<<v[i]<<" ";fout<<endl;
fout<<ct;
fin.close();fout.close();
return 0;
}
/*10
20
1 3
2 4
5 8
6 10
11 3
5 10
17 40
8 4
9 17
18 500
*/