Pagini recente » Cod sursa (job #1412062) | Cod sursa (job #1478599) | Cod sursa (job #1316951) | Cod sursa (job #959357) | Cod sursa (job #3253647)
#include <iostream>
#include <vector>
using namespace std;
#define pb push_back
#define sz(x) (int)(x.size())
#define all(a) a.begin(), a.end()
#define nl '\n'
const int N = 20 , INF = 1e9, mod = 998244353;
int n, g, w[N];
pair<int, int> best[(1 << N)];
int main() {
freopen("zebughil.in", "r", stdin);
freopen("zebughil.out", "w", stdout);
int T = 3;
while (T--) {
cin >> n >> g;
for (int i = 0; i < n; i++) {
cin >> w[i];
}
for (int i = 0; i < (1 << n); i++) {
best[i].first = best[i].second = INF;
}
for (int i = 0; i < n; i++) {
if (w[i] <= g) {
best[(1 << i)].first = 1;
best[(1 << i)].second = w[i];
}
}
for (int mask = 1; mask < (1 << n); mask++) {
for (int p = 0; p < n; p++) {
if (mask & (1 << p)) {
auto option = best[mask ^ (1 << p)];
if (option.second + w[p] <= g) {
option.second += w[p];
}
else {
option.first++;
option.second = w[p];
}
best[mask] = min(best[mask], option);
}
}
}
cout << best[(1 << n) - 1].first << '\n';
}
}