Pagini recente » Cod sursa (job #509121) | Cod sursa (job #2693879) | Cod sursa (job #2191589) | Cod sursa (job #2503759)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("energii.in");
ofstream fout("energii.out");
struct obiect{
int g,p;
};
bool compare(obiect a,obiect b)
{
return (double)(a.p/a.g)>(double)(b.p/b.g);
}
struct obiect2{
int g,p;
bool viz;
};
queue<obiect>q;
int gmax,n,pmax;
obiect v[1002];
int main()
{
fin>>n>>gmax;
for(int i=1;i<=n;i++)
{
fin>>v[i].g>>v[i].p;
}
sort(v+1,v+n+1,compare);
pmax=gmax/v[1].g*v[1].p;
gmax=gmax-(gmax/v[1].g*v[1].g);
int gmax2=gmax;
int pmax2=pmax;
while(gmax2>0)
{
q.push({gmax2,pmax2});
while(!q.empty())
{
obiect x;
x=q.front();
q.pop();
for(int i=2;i<=n;i++)
{
if(x.g-v[i].g>0)
{
q.push({x.g-v[i].g,x.p+v[i].p});
}
else if(x.g-v[i].g==0)
{
if(x.p+v[i].p>pmax)
pmax=x.p+v[i].p;
}
else if(x.g-v[i].g<0)
{
if(x.p>pmax)
pmax=x.p;
}
}
}
gmax2-=v[1].g;
pmax2-=v[1].p;
}
fout<<pmax;
return 0;
}