Cod sursa(job #2162335)

Utilizator natrovanCeval Marius natrovan Data 12 martie 2018 10:01:34
Problema Problema rucsacului Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>

using namespace std;
ifstream fin("rucsac.in");
ofstream fout("rucsac.out");

int N,G,k,i,j,a[10005],b[10005];
struct pachet{int g,v;}p[5005];

void afis(int v[10005])
{
    for(int i=1;i<=G;++i) fout<<v[i]<<' ';
    fout<<'\n';
}

int main()
{

    fin>>N>>G;
    for(k=1;k<=N;++k) fin>>p[k].g>>p[k].v;
    for(j=p[1].g;j<=G;++j) a[j]=p[1].v;
    //afis(a);

    for(i=2;i<=N;++i)
    {
        if(i&1)
        {
            for(j=1;j<=G;++j)
                if(j<p[i].g)a[j]=0;
            else
                {
                    a[j]=max(b[j],b[j-p[i].g]+p[i].v);
                }
        //afis(a);
        }
        else
        {
            for(j=1;j<=G;++j)
                    if(j<p[i].g)b[j]=0;
            else
                {
                    b[j]=max(a[j],a[j-p[i].g]+p[i].v);
                }
        //afis(b);
        }
    }
    int maxim=0;
    if(G&1) for(i=1;i<=G;++i) {if(a[i]>maxim)maxim=a[i];}
    else for(i=1;i<=G;++i)if(b[i]>maxim)maxim=b[i];
    fout<<maxim;
    return 0;
}