Pagini recente » Cod sursa (job #873037) | Cod sursa (job #2511365) | Cod sursa (job #1090018) | Cod sursa (job #2881648) | Cod sursa (job #3170906)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rucsac.in");
ofstream fout("rucsac.out");
typedef long long ll;
ll sumw,prof,pmax ;
ll p[200];
int viz[200];
ll n,W;
struct date
{
ll w;
ll prf;
} v[200];
bool sortbycomp(date a,date b)
{
return a.prf*b.w>=b.prf*a.w;
}
ll greedy(int poz,ll g)
{
ll greu=0,pf=0;
for(int i=poz;i<=n;i++)
if(greu+v[i].w<=g)
{
greu+=v[i].w;
pf+=v[i].prf;
}
return pf;
}
void profit(int n)
{
for(int i=n;i>=1;i--)
p[i]=p[i+1]+v[i].prf;
}
void bkt(int poz)
{
if(poz==n+1)
{
pmax=max(pmax,prof);
return;
}
viz[poz]=0;
bkt(poz+1);
viz[poz]=1;
sumw+=v[poz].w;
prof+=v[poz].prf;
if(sumw<=W&&prof+greedy(poz+1,W-sumw)>=pmax)
bkt(poz+1);
sumw-=v[poz].w;
prof-=v[poz].prf;
}
int main()
{
fin>>n>>W;
for(int i=1;i<=n;i++)
{
fin>>v[i].w>>v[i].prf ;
}
sort(v+1,v+n+1,sortbycomp);
profit(n);
pmax=greedy(1,W);
bkt(1);
fout<<pmax;
return 0;
}