Pagini recente » Autentificare | Cod sursa (job #973511) | Cod sursa (job #3185822) | Cod sursa (job #314505) | Cod sursa (job #215000)
Cod sursa(job #215000)
#include <stdio.h>
#include <utility>
using namespace std;
#define NMAX 20
#define SMAX 1 << 20
#define mp make_pair
#define ff first
#define ss second
int a[NMAX];
int G,N;
pair<int,int> D[SMAX];
pair<int,int> P;
void solve()
{
scanf("%d %d", &N, &G);
int i,j;
for (i = 0; i < N; i++)
scanf("%d ", &a[i]);
D[0] = mp(0,0);
for (i = 1; i < (1 << N); i++)
{
D[i] = mp(20, 0);
for (j = 0; j < N; j++)
if (i & (1 << j))
{
P=D[ i - (1 << j) ];
if (a[j] > P.ss)
{
P.ff ++;
P.ss = G-a[j];
}
else P.ss -= a[j];
if (P.ff < D[i].ff) D[i] = P;
if ( (P.ff == D[i].ff) && (P.ss > D[i].ss) ) D[i] = P;
}
// printf("%d -> %d %d\n", i, D[i].ff, D[i].ss);
}
printf("%d\n",D[ (1 << N) - 1 ].ff);
}
int main()
{
freopen("zebughil.in", "r", stdin);
freopen("zebughil.out", "w", stdout);
solve();
solve();
solve();
return 0;
}