Cod sursa(job #1808266)

Utilizator CrystyAngelDinu Cristian CrystyAngel Data 17 noiembrie 2016 16:12:52
Problema Zebughil Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.66 kb
#include <iostream>
#include <fstream>

using namespace std;

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

long long block[20];
long long p[20];
long long v[20];
long long save[20];
long long n,i,nr,j;
long long curr,ans,g,nrans,NR;

int main()
{
    p[0]=1;
    for(i=1; i<=18; ++i)
        p[i]=2*p[i-1];
    long long t = 3;
    while(t--)
    {
        fin>>n>>g;
        for(i=0; i<n; ++i)
            fin>>v[i];
        NR=0;
        while(n)
        {
            for(i=0; i<n; ++i)
                save[i]=0;
            ans=0;
            nrans=0;
            for(i=1; i<p[n]; ++i)
            {
                curr=0;
                nr=0;
                for(j=0; j<n; ++j)
                    if(p[j]&i)
                       curr+=v[j],++nr;
                if(curr<=g && curr>ans)
                {
                    ans=curr;
                    nrans=nr;
                    for(j=0; j<n; ++j)
                        save[j]=p[j]&i;
                }
                else
                if(curr<=g && curr==ans && nr<nrans)
                {
                    ans=curr;
                    nrans=nr;
                    for(j=0; j<n; ++j)
                        save[j]=p[j]&i;
                }
            }
            for(i=0; i<n; ++i)
                if(save[i])
                    v[i]=-1;
            for(i=0; i<n; ++i)
                if(v[i]==-1)
                {
                    for(j=i; j<n-1; ++j)
                        v[j]=v[j+1];
                    --i;
                    --n;
                }
            ++NR;
        }
        fout<<NR<<'\n';
    }
}