Pagini recente » Cod sursa (job #3177252) | Cod sursa (job #316587) | Cod sursa (job #1989220) | Cod sursa (job #54562) | Cod sursa (job #214996)
Cod sursa(job #214996)
#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,G);
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 < D[i]) D[i] = P;
}
}
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;
}