Pagini recente » Cod sursa (job #2388600) | Cod sursa (job #1397547) | Cod sursa (job #449585) | Cod sursa (job #2252009) | Cod sursa (job #1739651)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("energii.in");
ofstream fout("energii.out");
#define NMAX 100000
long long d[5002];
int main()
{
int G,W,i,w;
pair<int,int>p[1002];
fin>>G>>W;//Generatoare,energia necesara
for(i=1;i<=G;i++)
fin>>p[i].first>>p[i].second;//energia,costul
for(i=1;i<=G;i++)
{
for(w=W;w>=1;w--)
if(w>=p[i].first)
{
if(w==p[i].first)
{if(d[w]==0)
d[w]=p[i].second;
}
else
{if(d[w]==0)
{
if(d[w+1]==0 && d[w-p[i].first]!=0)
d[w]=d[w-p[i].first]+p[i].second;
else
if(d[w-p[i].first]==0 && d[w+1]!=0)
d[w]=d[w+1];
else
d[w]=min(d[w-p[i].first]+p[i].second,d[w+1]);
}
else
{
if(d[w+1]!=0 && d[w+1]<d[w])
d[w]=min(d[w],d[w+1]);
if(d[w]>d[w-p[i].first]+p[i].second && d[w-p[i].first]!=0)
d[w]=d[w-p[i].first]+p[i].second;
}
}
}
else
{
if(d[w]==0)
d[w]=d[w+1];
else
if(d[w+1]<d[w] && d[w+1]!=0 && d[w]!=0)
d[w]=d[w+1];
}
}
if(d[W]!=0)
fout<<d[W];
else
fout<<-1;
return 0;
}