Pagini recente » Cod sursa (job #2540103) | Cod sursa (job #344212) | Cod sursa (job #1127475) | Cod sursa (job #2383194) | Cod sursa (job #3173636)
#include <fstream>
using namespace std;
ifstream cin("zebughil.in");
ofstream cout("zebughil.out");
int n,v[18],t,G,s1;
struct numar
{
int g,c;
} d[(1<<18)];
int main()
{
t=3;
///d[i].g=greutatea a i blocuri
///d[i].c=nr minim de camioane
while(t--)
{
cin>>n>>G;
for(int i=0; i<n; i++)
cin>>v[i];
for(int i=0; i<(1<<n); i++)
{
d[i].c=2e9;
d[i].g=0;
}
d[0].c=1;
d[0].g=0;
for(int s=1; s<(1<<n); s++)
for(int i=0; i<n; i++)
if(s&(1<<i))
{
s1=s-(1<<i);
if(d[s1].g+v[i]<=G)
{
if(d[s].c>d[s1].c||(d[s].c==d[s1].c &&d[s1].g+v[i]<=d[s].g))
{
d[s].c=d[s1].c;
d[s].g=d[s1].g+v[i];
}
}
else
{
if(d[s].c>d[s1].c+1||(d[s].c==d[s1].c+1&&d[s].g>v[i]))
{
d[s].g=v[i];
d[s].c=d[s1].c+1;
}
}
}
cout<<d[(1<<n)-1].c<<'\n';
}
return 0;
}