Cod sursa(job #953070)

Utilizator primulDarie Sergiu primul Data 24 mai 2013 18:44:48
Problema Zebughil Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
#include<fstream>
using namespace std;
int n,G,g[17];
int best[132000];
//best[conf] la iteratia nrc = spatiul liber maxim pe care il am in ultimul camion folosit
//transportand bitii de 1 din conf cu nrc camioane
//best[conf]=-1 daca nu a fost inca vizitata,adica nu era posibila cu nrc-1 camioane
 
int main()
{
    int t,nrc,i,conf,lim;
    ifstream fin("zebughil.in");
    ofstream fout("zebughil.out");
    for(t=1;t<=3;t++)
    {
        fin>>n>>G;
        for(i=0;i<n;i++)
            fin>>g[i];
        lim=(1<<n);
        for(conf=0;conf<lim;conf++)
            best[conf]=-1;
        best[0]=G; //initial am un singur camion si nu transport pe nimeni,deci am liber G
        for(nrc=1;nrc<=n;nrc++)
        {
            for(conf=1;conf<lim;conf++)
            {
                if(best[conf]>=0) //daca am putut sa transport conf cu nrc-1 camioane,atunci acum am un camion nou liber
                    best[conf]=G;
                else //n-am putut pana acum sa transport conf cu nrc-1 camioane
                {
                    for(i=0;i<n;i++)
                        if((conf&(1<<i))!=0)
                            best[conf]=max(best[conf],best[conf-(1<<i)]-g[i]);
                }
            }
            if(best[lim-1]>=0) //daca am putut sa le transport pe toate,atunci am gasit nrc minim
            {
                fout<<nrc<<"\n";
                break;
            }
        }
    }
    fin.close();
    fout.close();
    return 0;
}