Pagini recente » Cod sursa (job #1792097) | Cod sursa (job #2274147) | Cod sursa (job #861756) | Cod sursa (job #2496032) | Cod sursa (job #2846631)
#include <fstream>
using namespace std;
ifstream fin("zebughil.in");
ofstream fout("zebughil.out");
struct punct {
int nr, g;
}d[130000];
int v[18], n, gmax, i, st, ant, bit;
int main()
{
d[0].nr=1;
d[0].g=0;
for(int t=1;t<=3;t++)
{
fin>>n>>gmax;
for(i=1;i<=n;i++)
fin>>v[i];
for(i=1;i<(1<<n);i++)
{
d[i].nr=n+1;
d[i].g=0;
}
for(st=1;st<(1<<n);st++)
{
for(bit=0;bit<n;bit++)
{
if(((st>>bit)&1)==1)
{
ant=st-(1<<bit);
if(d[ant].nr!=n+1)
{
///incerc sa adaug la acelasi transport
if(d[ant].g+1ll*v[bit+1]<=gmax)
{
if(d[st].nr>d[ant].nr||d[st].nr==d[ant].nr&&d[st].g>d[ant].g+v[bit+1])
{
d[st].nr=d[ant].nr;
d[st].g=d[ant].g+v[bit+1];
}
}
else
{
/// trebuie sa initiez un nou traNSPORT
if(d[st].nr>d[ant].nr+1||d[st].nr==d[ant].nr+1&&d[st].g>v[bit+1])
{
d[st].nr=d[ant].nr+1;
d[st].g=v[bit+1];
}
}
}
}
}
}
fout<<d[(1<<n)-1].nr<<"\n";
}
}