Pagini recente » Cod sursa (job #1666693) | Cod sursa (job #2052439) | Cod sursa (job #567030) | Cod sursa (job #326845) | Cod sursa (job #1009476)
#include <iostream>
#include <fstream>
#include <cstring>
#define one(x) (x&(x-1))^x
using namespace std;
ifstream fin("zebughil.in");
ofstream fout("zebughil.out");
int sol[1<<17][18],el[18],n,g,inf=2147000000,res=0;
void Solve()
{ int i,j,c,s,ram;
for(i=0;i<n;i++)
sol[1<<i][1]=g-el[i];
res=n;
for(s=0;s<(1<<n);s++)
for(c=1;c<=n;c++)
if (sol[s][c]>-1)
{ if (s==((1<<n)-1))
{res=c; return;}
for(i=n-1;i>=0;i--)
if ((s&(1<<i))==0)
{ ram=sol[s][c];
if (ram>=el[i])
sol[s+(1<<i)][c]=max(sol[s+(1<<i)][c],ram-el[i]);
else
sol[s+(1<<i)][c+1]=max(sol[s+(1<<i)][c+1],g-el[i]);
}
}
}
int main()
{ int i,j;
for(i=1;i<=3;i++)
{ fin>>n>>g;
memset(sol,-1,sizeof(sol));
for(j=n-1;j>=0;j--) fin>>el[j];
Solve();
fout<<res<<"\n";
}
return 0;
}