Cod sursa(job #1007102)

Utilizator vladm97Matei Vlad vladm97 Data 8 octombrie 2013 11:55:25
Problema Problema rucsacului Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <iostream>
#include <fstream>
#define lmax 5010
using namespace std;

int N,G,g[lmax],v[lmax],comb[lmax],k;
long long valMax=0;
ifstream in("rucsac.in");
ofstream out("rucsac.out");

void insumare(int p)
{
    int val=0,gr=0;
    bool ok=true;
    for(int i=1;(i<=p) && (ok==true) ;i++)
    {
        val+=v[comb[i]];
        gr+=g[comb[i]];
        if(gr>G)
        {
            ok=false;
        }
    }
    if(ok==true)
    {
        if(val>valMax)
           {
               valMax=val;
           }
    }
}

bool solutie(int p)
{
    return (p==k);
}

void bkt(int p)
{
   int val;

   for(val=comb[p-1]+1;val<=N;val++)
       {
           comb[p]=val;
           if(solutie(p))
           {
               insumare(p);
           }
           else
           {
               bkt(p+1);
           }
       }
}

void bt(int i)
{
    k=i;
    bkt(1);
}

void start()
{
    for(int i=1;i<=N;i++)
    {
        bt(i);
        comb[0]=0;
    }
}

int main()
{
    in>>N>>G;
    for(int i=1;i<=N;i++)
    {
        in>>g[i]>>v[i];
    }
    start();
    out<<valMax;
}