Cod sursa(job #1806631)

Utilizator CrystyAngelDinu Cristian CrystyAngel Data 15 noiembrie 2016 16:17:48
Problema Zebughil Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.68 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int block[20];
int p[20];
int v[20];
int save[20];
int n,i,nr,j;
long long s,sum;
int curr,ans,g;

int main()
{
    p[0]=1;
    for(i=1; i<=19; ++i)
        p[i]=2*p[i-1];
    int 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;
            sum=0;
            for(i=1; i<p[n]; ++i)
            {
                curr=0;
                s=0;
                for(j=0; j<n; ++j)
                    if(p[j]&i)
                    {
                        ++curr;
                        s+=v[j];
                    }
                if(s<=g && curr>ans)
                {
                    ans=curr;
                    sum=s;
                    for(j=0; j<n; ++j)
                        save[j]=p[j]&i;
                }
                else
                if(s<=g && curr==ans && s>sum)
                {
                    ans=curr;
                    sum=s;
                    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';
    }
}