Pagini recente » Cod sursa (job #1698882) | Cod sursa (job #2578576) | Cod sursa (job #1932065) | Cod sursa (job #2610388) | Cod sursa (job #1233753)
#include<fstream>
using namespace std;
ifstream in("zebughil.in"); ofstream out("zebughil.out");
int n,G,g[17],b[131073];
//b[conf] la iteratia nrc = spatiul liber maxim pe care il am in ultimul camion folosit
//transportand bitii de 1 din conf cu nrc camioane
//b[conf]=-1 daca nu a fost inca vizitata,adica nu era posibila cu nrc-1 camioane
int main()
{ int i,conf,t=3;
while(t--)
{ in>>n>>G;
for(i=0;i<n;i++) in>>g[i];
int m=(1<<n);
for(conf=1;conf<m;conf++) b[conf]=-1;
b[0]=G; //initial am un singur camion si nu transport pe nimeni,deci am liber G
for(int nrc=1;nrc<=n;)
{ for(conf=1;conf<m;conf++)
if(b[conf]>=0) b[conf]=G;//daca am putut sa transport conf cu nrc-1 camioane,atunci acum am un camion nou liber
else //n-am putut pana acum sa transport conf cu nrc-1 camioane
{ for(i=0;i<n;i++)
if(conf&(1<<i)) b[conf]=max(b[conf],b[conf-(1<<i)]-g[i]);
}
if(b[m-1]>=0) {out<<nrc<<"\n"; nrc=n+1;}//daca am putut sa le transport pe toate,atunci am gasit nrc minim
else nrc++;
}
}
out.close();
return 0;
}