Pagini recente » Cod sursa (job #160660) | Cod sursa (job #2069454) | Cod sursa (job #1191633) | Cod sursa (job #2267963) | Cod sursa (job #2495287)
#include <bits/stdc++.h>
#define cnt first
#define space second
const int TEST = 3;
const int BITS = 17;
const int INF = 500;
const int MAX_N = 1 << BITS;
int n, g;
std::pair <int, int> dp[MAX_N];
int arr[BITS];
int main() {
std::pair <int, int> aux;
freopen("zebughil.in", "r", stdin);
freopen("zebughil.out", "w", stdout);
for (int test = 0; test < TEST; ++test) {
std::cin >> n >> g;
for (int i = 0; i < n; ++i) {
std::cin >> arr[i];
}
for (int mask = 0; mask < (1 << n); ++mask) {
dp[mask] = std::make_pair(20, 0);
}
dp[0] = std::make_pair(0, g);
for (int mask = 1; mask < (1 << n); ++mask) {
for (int bit = 0; bit < n; ++bit) {
if ((mask & (1 << bit)) > 0) {
aux = dp[mask ^ (1 << bit)];
if (aux.space + arr[bit] <= g) {
aux.space += arr[bit];
} else {
aux.space = (aux.space + arr[bit]) % g;
++aux.cnt;
}
if (dp[mask] > aux) {
dp[mask] = aux;
}
}
}
}
std::cout << dp[(1 << n) - 1].cnt << "\n";
}
return 0;
}