Pagini recente » Cod sursa (job #2516654) | Cod sursa (job #1262100) | Cod sursa (job #2384863) | Cod sursa (job #2623081) | Cod sursa (job #602482)
Cod sursa(job #602482)
#include <iostream>
#include <fstream>
#include <vector>
#define NMax 17
#define Infinit 1000000000
using namespace std;
ifstream fin ("zebughil.in");
ofstream fout ("zebughil.out");
int N, GMax, G[NMax], Best[1<<NMax];
vector <int> Stare[1<<NMax];
void Initialize ()
{
int n=(1<<NMax);
for (int i=1; i<n; ++i)
{
for (int j=0; j<NMax; ++j)
{
if (i&(1<<j))
{
Stare[i].push_back (j);
}
}
}
}
int main()
{
Initialize ();
for (int T=0; T<3; ++T)
{
fin >> N >> GMax;
for (int i=0; i<N; ++i)
{
fin >> G[i];
}
int n=(1<<N);
for (int i=1; i<n; ++i)
{
Best[i]=Infinit;
int MaxSubM=(1<<Stare[i].size ());
for (int SubM=0; SubM<MaxSubM; ++SubM)
{
int NBlocuri=Stare[SubM].size ();
int GCurent=0, SubM2=i;
for (int j=0; j<NBlocuri; ++j)
{
int Bloc=Stare[i][Stare[SubM][j]];
GCurent+=G[Bloc];
SubM2^=(1<<Bloc);
}
if (GCurent<=GMax)
{
Best[i]=min (Best[i], Best[SubM2]+1);
}
}
}
fout << Best[n-1] << "\n";
}
fin.close ();
fout.close ();
return 0;
}