Pagini recente » Cod sursa (job #3235933) | Cod sursa (job #49312) | Cod sursa (job #1019557) | Cod sursa (job #513013) | Cod sursa (job #807187)
Cod sursa(job #807187)
#include<cstdio>
#include<bitset>
#include<deque>
#include<vector>
using namespace std;
deque<pair<int,int> >Q;
bitset<18>B;
bitset<2320000> viz;
int N,G,V[18],a,cost,pft,conf,i,SOL,j,ok;
vector<int> T;
int main()
{
freopen("zebughil.in","r",stdin);
freopen("zebughil.out","w",stdout);
for(j=1;j<=3;j++)
{
SOL=0;
Q.resize(0);
conf=cost=pft=0;
viz=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;
}