Cod sursa(job #2593881)

Utilizator anamariatoaderAna Toader anamariatoader Data 4 aprilie 2020 19:50:37
Problema Zebughil Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <fstream>
#define inf 2000000000

using namespace std;

ifstream fin("zebughil.in");
ofstream fout("zebughil.out");

int t, i, x, n, G;
struct nr{
    int g, nr;
}d[132005];

void reset(int n){
    for(int i = 1; i <= n; i++){
        d[i].g = 0;
        d[i].nr = inf;
    }
}

int main()
{
    for(t = 1; t < 4; t++){
        fin >> n >> G;
        int stari = (1 << n) - 1;
        reset(stari);
        for(i = 1; i <= n; i++){
            fin >> x;
            d[1 << (i-1)] = {x,1};
        }
        for(int st = 0; st <= stari; st++)
          for(i = 1 ; i <= n; i++)
            if((st >> (i-1)) & 1){
                int s = st - (1 << (i-1));
                if(!s)
                    continue;
                int g = d[s].g + d[1 << (i-1)].g, nr = d[s].nr;
                if(g > G)
                    g = min(d[s].g,d[1 << (i-1)].g), nr++;

                if(d[st].nr > nr){
                    d[st].g = g;
                    d[st].nr = nr;
                }
                else if(d[st].nr == nr && g < d[st].g)
                    d[st].g = g;
            }
        fout << d[stari].nr << '\n';
    }
    return 0;
}