Cod sursa(job #2391977)

Utilizator Eszter04Halasz Eszter Eszter04 Data 29 martie 2019 14:37:57
Problema Problema rucsacului Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <fstream>
#include <vector>

using namespace std;

#define k first
#define d second

ifstream cin("rucsac.in");
ofstream cout("rucsac.out");

vector < pair<int,int> > t;
vector < pair<int,int> > x;

int n,g,i,j,k,maxi,a,b,p;

int main()
{
    cin>>n>>g;

    t.resize(n+1);
    x.resize(g+1);

    for(i=1;i<=n;++i)
    {
        cin>>a>>b;
        t[i].k=a;
        t[i].d=b;
    }

    x[t[1].k].d=t[1].d;
    x[t[1].k].k=1;

    for(i=2;i<=n;++i)
    {
        k=t[i].k;
        for(j=g;j>=1;--j)
        {
            if(x[j].d!=0)
            {
                if(x[j+k].d<x[j].d+t[i].d)
                {
                    x[j+k].d=x[j].d+t[i].d;
                   x[j+k].k=i;
                }
                if(j==k && x[j].d<t[i].d)
                {
                    x[j].d=t[i].d;
                    x[j].k=i;
                }
            }
            else if(j==k)
            {
                 x[j].d=t[i].d;
                    x[j].k=i;
            }
        }
    }

    maxi=0;
    for(i=1;i<=g;++i)
        if(x[i].d>maxi)
        {
            maxi=x[i].d;
            p=i;
        }

   /* while(p!=t[p].k)
    {
        cout<<x[p].k<<" ";
        p=p-t[x[p].k].k;
    }
*/
    cout<<maxi;




    return 0;
}