Pagini recente » Cod sursa (job #2152604) | Cod sursa (job #2907715) | Cod sursa (job #1014427) | Cod sursa (job #3173529) | Cod sursa (job #2320635)
#include <iostream>
#include <fstream>
#include <cstring>
#include <algorithm>
#include <vector>
#define Nmax 17
#define INF (1<<29)
using namespace std;
ifstream f("zebughil.in");
ofstream g("zebughil.out");
int n, G;
int ok=0, x;
int s[Nmax], cam;
int ans=INF, stop;
bool seen[Nmax];
int d[Nmax];
//int s[1<<Nmax]+1;//nr min de camioane cand sunt incarcate pietrele din bitii lui i
void read()
{
f >> n >> G;
for (int i = 1; i <= n; i++)
f >> d[i];
// sort(d.begin(), d.end());
}
void bkt(int k)
{
if (stop > 20000000) return;
if(cam>ans) return;
if(k > n)
{
ans=min(ans, cam);
return;
}
for (int i = 1; i <= n; i++)
{
if(seen[i] == 0)
{
stop++;
seen[i]=1;
if (d[i] + s[k-1] <= G)
{
s[k] = s[k-1] + d[i];
bkt(k+1);
}
else
{
cam++;
s[k]=d[i];
bkt(k+1);
cam--;
}
seen[i]=0;
}
}
}
void solve()
{
ans=INF;
cam=1;
memset(s, 0, Nmax);
bkt(1);
g << ans << '\n';
}
int main()
{
int test=3;
while(test--)
{
read();
solve();
}
return 0;
}