Pagini recente » Cod sursa (job #2502616) | Cod sursa (job #223239) | Cod sursa (job #566799) | Cod sursa (job #2712563) | Cod sursa (job #393654)
Cod sursa(job #393654)
#include<cstdio>
#define maxx(a,b) ((a<b)?b:a)
#define N_MAX 20
#define OO 2000000001
int N, best[1<<17][N_MAX],G,g[N_MAX];
int bit(int x, int n)
{
return ((1<<n)&x) != 0;
}
int solve()
{
for (int i=0; i<=(1<<N)-1; ++i)
{
for (int j=0; j<=N; ++j)
best[i][j]=-OO;
}
best[0][0]=0;
for (int i=1;i<(1<<N);++i)
{
for (int j=1; j<=N; ++j)
{
for (int k=1;k<=N;++k)
{
// daca k apartine i
if (!bit(i, k-1)) continue;
if (best[i-(1<<(k-1))][j] >= g[k])
best[i][j]=maxx(best[i][j],best[i-(1<<(k-1))][j]-g[k]);
if (best[i-(1<<(k-1))][j-1]>=0)
best[i][j]=maxx(best[i][j],G-g[k]);
}
}
}
for (int i=1;i<=N; ++i)
if(best[(1<<N)-1][i]>=0)
return i;
return -1;
}
int main()
{
freopen("zebughil.in","r",stdin);
freopen("zebughil.out","w",stdout);
for (int i=1; i<=3; ++i)
{
scanf("%d%d",&N,&G);
for (int j=1; j<=N; ++j)
scanf("%d",&g[j]);
printf("%d\n",solve());
}
return 0;
}