Pagini recente » Cod sursa (job #2271480) | Cod sursa (job #2736076) | Cod sursa (job #1772748) | Cod sursa (job #1503219) | Cod sursa (job #953070)
Cod sursa(job #953070)
#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;
}