Pagini recente » Cod sursa (job #2654380) | Cod sursa (job #1129896) | Cod sursa (job #108383) | Cod sursa (job #63121) | Cod sursa (job #2157910)
#include <bits/stdc++.h>
#define x first
#define y second
using namespace std;
ifstream fi("zebughil.in");
ofstream fo("zebughil.out");
using i64 = long long;
using pll = pair<i64, i64>;
const int N = 17;
pll dp[1 << N];
vector<i64> blocks;
int n, g;
static void solve() {
fi >> n >> g;
blocks.resize(n);
for (auto &i: blocks)
fi >> i;
for (int i = 0; i < (1 << n); ++i)
dp[i] = {20, 0};
dp[0] = {1, 0};
for (int msk = 0; msk < (1 << n); ++msk) {
for (int add = 0; add < n; ++add) if (~msk & (1 << add)) {
pll &now = dp[msk | (1 << add)];
if (dp[msk].y + blocks[add] <= g)
now = min(now, pll(dp[msk].x, dp[msk].y + blocks[add]));
else
now = min(now, pll(dp[msk].x + 1, dp[msk].y + blocks[add] - g)); } }
fo << dp[(1 << n) - 1].x << endl; }
int main() {
int tsk = 3;
while (tsk--)
solve();
return 0; }