Cod sursa(job #2320635)

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