Pagini recente » Cod sursa (job #1414127) | Monitorul de evaluare | Cod sursa (job #1589317) | Cod sursa (job #2341814) | Cod sursa (job #3356251)
#include <fstream>
using namespace std;
ifstream cin("energii.in");
ofstream cout("energii.out");
pair<int, int> v[1002]; /// energie, cost
pair<int, int> suma[10000001]; /// se-poate-Sau-nu, cost
int main()
{
int g,w,pozmax;
cin>>g>>w;
for(int n2=1;n2<=g;n2++) {
cin>>v[n2].first>>v[n2].second;
}
pozmax=v[1].first;
/* for(int n2=1;n2<=10000000;n2++) {
suma[n2].second=10000001;
}*/
suma[v[1].first].first=1;
suma[v[1].first].second=v[1].second;
for(int n2=2;n2<=g;n2++) {
for(int n3=pozmax;n3>=0;n3--)
if(suma[n3].first==1/* && n3+v[n2].first<=w*/) {
suma[n3+v[n2].first].first=1;
suma[n3+v[n2].first].second=suma[n3].second+v[n2].second;
}
suma[v[n2].first].first=1;
if(suma[v[n2].first].second==0)
suma[v[n2].first].second=v[n2].second;
else if(suma[v[n2].first].second>=v[n2].second)
suma[v[n2].first].second=v[n2].second;
pozmax+=v[n2].first;
}
int s=suma[w].second;
for(int n2=w;n2<=pozmax;n2++)
if(suma[n2].first==1 && suma[n2].second<=s)
s=suma[n2].second;
if(s==10000001)
s=-1;
/*for(int n2=1;n2<=pozmax;n2++) {
cout<<suma[n2].first<<" "<<suma[n2].second<<'\n';
}*/
cout<<s;
return 0;
}