Pagini recente » Cod sursa (job #448293) | Cod sursa (job #2987981) | Cod sursa (job #1572626) | Cod sursa (job #2901695) | Cod sursa (job #807128)
Cod sursa(job #807128)
#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.resize(0);
viz=0;
pft=0;conf=0;
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;
}
printf("%d\n",SOL);
}
return 0;
}