Pagini recente » Cod sursa (job #2227957) | Cod sursa (job #2974041) | Cod sursa (job #804079) | Cod sursa (job #1687707) | Cod sursa (job #1667648)
#include <fstream>
using namespace std;
ifstream fin("energii.in");
ofstream fout("energii.out");
int minim(const int x, const int y)
{
if(x>y)
return y;
return x;
}
struct generator
{
int energie,cost;
};
generator generatoare[1005];
int optim[5005];
int g,w,nr;
int min_cautat=999999999;
bool ok;
void citire()
{
int i,e,c;
fin>>g>>w;
for(i=1;i<=g;i++)
{
fin>>e>>c;
if(e>w)
{
if(c<min_cautat)
{
ok=true;
min_cautat=c;
}
}
else
{
generatoare[++nr].energie=e;
generatoare[nr].cost=c;
}
}
}
void init()
{
int i;
for(i=1;i<=w;i++)
optim[i]=min_cautat;
}
void dinamica()
{
int i,j;
for(i=1;i<=nr;i++)
{
int e=generatoare[i].energie;
int c=generatoare[i].cost;
for(j=w;j>=e;j--)
{
optim[j]=minim(optim[j],optim[j-e]+c);
}
for(j;j>=0;j--)
optim[j]=minim(optim[j],optim[j+1]);
}
}
int main()
{
citire();
init();
dinamica();
if(optim[w]<min_cautat)
{
ok=true;
min_cautat=optim[w];
}
if(ok==false)
fout<<-1;
else
fout<<min_cautat;
return 0;
}