Pagini recente » Cod sursa (job #2129755) | Cod sursa (job #341503) | Cod sursa (job #950968) | Cod sursa (job #3169436) | Cod sursa (job #1483149)
#define _CRT_SECURE_NO_DEPRECATE
#include <cstdio>
#include <cstring>
#define MAXN 17
#define DIM 512
int N, G, cnt[1 << MAXN], min[1 << MAXN], A[MAXN], pos = DIM, len;
char buf[DIM];
inline int r_int32(){
while (buf[pos] < '0' || buf[pos] > '9'){
if (++pos >= DIM) len = fread(buf, 1, DIM, stdin), pos = 0;
}
int val = 0;
while (buf[pos] >= '0' && buf[pos] <= '9'){
if (pos == len) break;
val = val * 10 + buf[pos] - '0';
if (++pos == DIM) len = fread(buf, 1, DIM, stdin), pos = 0;
}
return val;
}
inline void w_int32(int k){
char lim[16], *s;
s = lim + 15, *s = 0;
do{
*--s = k % 10 + '0';
k /= 10;
} while (k);
puts(s);
}
int main()
{
freopen("zebughil.in", "r", stdin);
freopen("zebughil.out", "w", stdout);
for (int test = 0; test < 3; ++test){
N = r_int32(), G = r_int32();
for (int i = 1; i <= N; ++i) A[i] = r_int32();
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;
}
}
w_int32(cnt[(1 << N) - 1]);
}
return 0;
}