Pagini recente » Cod sursa (job #1801426) | Cod sursa (job #1810083) | Borderou de evaluare (job #1170424) | Cod sursa (job #102954) | Cod sursa (job #1483153)
#define _CRT_SECURE_NO_DEPRECATE
#include <cstdio>
#include <cstring>
#define MAXN 17
int N, G, cnt[1 << MAXN], min[1 << MAXN], A[MAXN];
int main()
{
freopen("zebughil.in", "r", stdin);
freopen("zebughil.out", "w", stdout);
for (int test = 0; test < 3; ++test){
scanf("%d %d", &N, &G);
for (int i = 1; i <= N; ++i){
scanf("%d", &A[i]);
if (!A[i]) --i;
}
memset(min, 0, sizeof(int) * (1 << N));
memset(cnt, 0, sizeof(int) * (1 << N));
for (int conf = 1; conf < 1 << N; ++conf)
for (int j = 0; j < N; ++j)
if (conf & (1 << j)){
int ins = conf ^ (1 << j),
_min, _cnt;
if (min[ins] + A[j + 1] <= G && cnt[ins]){
_min = min[ins] + A[j + 1];
_cnt = cnt[ins];
}
else {
_min = min[ins] ? min[ins] : (1 << 31) - 1;
if (_min > A[j + 1]) _min = A[j + 1];
_cnt = cnt[ins] + 1;
}
if (!cnt[conf] || _cnt < cnt[conf] || (_cnt == cnt[conf] && _min < min[conf])){
min[conf] = _min;
cnt[conf] = _cnt;
}
}
printf("%d\n", cnt[(1 << N) - 1]);
}
return 0;
}