Cod sursa(job #2320613)

Utilizator Anastasia11Susciuc Anastasia Anastasia11 Data 14 ianuarie 2019 22:45:17
Problema Zebughil Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.35 kb
#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;
}