Cod sursa(job #2503759)

Utilizator andrei_044Andrei Constantin andrei_044 Data 3 decembrie 2019 19:00:22
Problema Energii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.33 kb
#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;
}