Cod sursa(job #3170906)

Utilizator aaagabiTurbinca Gabriel aaagabi Data 18 noiembrie 2023 11:09:10
Problema Problema rucsacului Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#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;
}