Pagini recente » Cod sursa (job #1809021) | Cod sursa (job #2894745) | Cod sursa (job #151883) | Cod sursa (job #1940483) | Cod sursa (job #537059)
Cod sursa(job #537059)
#include<fstream>
using namespace std;
ifstream f("zebughil.in");
ofstream g("zebughil.out");
int tir[1<<18][18],N,G,gr[18];
void rezolva()
{
int i,j,b,k,n;
n=1<<N;
for(i=0;i<=n;++i)
for(j=0;j<=N;++j) tir[i][j]=-1;
tir[0][0]=0;
for(i=0;i<=n;++i)
for(j=0;j<=N;++j)
if(tir[i][j]!=-1)
{
for(b=0;b<=N && i+(1<<b)<=n;++b)
if((i&(1<<b))==0)
{
k=i+(1<<b);
if(gr[b]<=tir[i][j])
{
if(tir[k][j]<tir[i][j]-gr[b])
tir[k][j]=tir[i][j]-gr[b];
}
else if(tir[k][j+1]<G-gr[b])
tir[k][j+1]=G-gr[b];
}
}
--n;
for(j=1;j<=N;++j)
if(tir[n][j]!=-1)
{
g<<j<<'\n';
return;
}
}
int main()
{
int T=3,i;
for(;T;--T)
{
f>>N>>G;
for(i=0;i<N;++i) f>>gr[i];
rezolva();
}
}