Pagini recente » Cod sursa (job #1550172) | Cod sursa (job #2743390) | Cod sursa (job #2844891) | Cod sursa (job #3219150) | Cod sursa (job #2973791)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream in("rucsac.in");
ofstream out("rucsac.out");
struct elem
{
int w, p;
};
bool cmp(elem i, elem j)
{
if(i.p/i.w<j.p/j.w)
return 1;
else if(i.p/i.w>j.p/j.w)
return 0;
else
return i.w<j.w;
}
int main()
{
int n, g, i, pmax=0, ok;
elem v[5001];
in>>n>>g;
for(int i=1; i<=n; i++)
{
in>>v[i].w>>v[i].p;
}
sort(v+1, v+n+1, cmp);
i=n;
while(g>0 and i>0)
{
if(v[i].w<=g){
pmax+=v[i].p;
g-=v[i].w;
}
else
{
ok=1;
for(int j=i+1; i<=n and ok==1; j++)
{
if(v[i].p>v[j].p and v[i].w<=g+v[j].w)
{
ok=0;
g-=v[i].w-v[j].w;
pmax+=v[i].p-v[j].p;
v[j].p=10001;
}
}
}
i--;
}
out<<pmax;
return 0;
}