Pagini recente » Cod sursa (job #500078) | Cod sursa (job #2903599) | Cod sursa (job #103929) | Cod sursa (job #1929535) | Cod sursa (job #2320613)
#include <iostream>
#include <fstream>
#include <cstring>
#include <algorithm>
#include <vector>
#define Nmax 17
#define INF 0x3f3f3f3f
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;
bool seen[Nmax];
vector <int> d;
//int s[1<<Nmax]+1;//nr min de camioane cand sunt incarcate pietrele din bitii lui i
void read()
{
f >> n >> G;
d.clear();
for (int i = 1; i <= n; i++)
{
f >> x;
d.push_back(x);
}
sort(d.begin(), d.end());
}
void bkt(int k)
{
if(k>n)
{
ans=min(ans, cam);
return;
}
if(cam>ans) return;
for (int i = 1; i <= n; i++)
{
if(seen[i] == 0)
{
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;
}