Cod sursa(job #1832845)

Utilizator ade_tomiEnache Adelina ade_tomi Data 21 decembrie 2016 03:50:22
Problema Zebughil Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
const int NMAX = 18;
int v[NMAX], g, n;
pair <int, int> d[(1 << NMAX)];
int main ()
{
    ifstream cin ("zebughil.in");
    ofstream cout ("zebughil.out");
    for (int shp = 1; shp <= 3; shp++)
    {
        cin >> n >> g;
        for (int i = 0; i < n; i++)
            cin >> v[i];
        d[0] = make_pair(0, 0);
        for (int i = 1; i < (1 << n); i++)
        {
            d[i] = make_pair(NMAX, 0);
            for (int bit = 0; bit < n; bit++)
            {
                int p = (i & (1 << bit));
                if (p == 0)
                    continue;
                pair <int, int> new_p;
                int nr = i - (1 << bit);
                if (d[nr].second >= v[bit])
                {
                    new_p = make_pair(d[nr].first, d[nr].second - v[bit]);

                }
                else
                    new_p = make_pair(d[nr].first + 1, g - v[bit]);

                if (d[i].first > new_p.first)
                    d[i] = new_p;
                else if (d[i].first == new_p.first && d[i].second < new_p.second)
                    d[i] = new_p;
                
            }
        }
        cout << d[(1 << n) - 1].first << "\n";
    }
    return 0;

}