Cod sursa(job #807146)

Utilizator auRSTARHreapca Aurelian auRSTAR Data 4 noiembrie 2012 11:10:02
Problema Zebughil Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.45 kb
#include<cstdio>
#include<bitset>
#include<deque>
#include<vector>
using namespace std;
deque<pair<int,int> >Q;
bitset<20>B;
bitset<132000> viz;
int N,G,V[20],a,cost,pft,conf,i,SOL,j;
vector<int> T;
int main()
{
    freopen("zebughil.in","r",stdin);
    freopen("zebughil.out","w",stdout);
    for(j=1;j<=3;j++)
    {
    SOL=0;
    scanf("%d%d",&N,&G);
    for(i=1;i<=N;i++)scanf("%d",&V[i]);
    for(;N;)
    {
        Q.push_back(make_pair(0,0));
        viz[0]=1;
        for(;!Q.empty();)
        {
            B=Q.front().first;
            cost=Q.front().second;
            if(cost>pft){pft=cost;conf=B.to_ulong();}
            if(pft==G)break;
            for(i=1;i<=N;i++)
            {
                if(B[i])continue;
                B[i]=1;
                cost+=V[i];
                if(cost>G){B[i]=0;cost-=V[i];continue;}
                a=B.to_ulong();
                if(viz[a]){B[i]=0;cost-=V[i];continue;}
                viz[a]=1;
                Q.push_back(make_pair(a,cost));
                B[i]=0;
                cost-=V[i];
            }
            Q.pop_front();
        }
        B=conf;
        ++SOL;
        T.resize(0);
        for(i=1;i<=N;i++)if(!B[i])T.push_back(V[i]);
        vector<int>::iterator it=T.begin();
        for(N=1;it!=T.end();N++,it++)V[N]=*it;
        --N;
        Q.resize(0);
        viz=0;
        pft=0;conf=0;
    }
    printf("%d\n",SOL);
    }
    return 0;
}