Pagini recente » Cod sursa (job #2938990) | Cod sursa (job #1251831) | Cod sursa (job #1322864) | Cod sursa (job #2287464) | Cod sursa (job #2439129)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n, g;
vector < ll > cost;
void Back(int lvl, int pwr_2, int maskQuerry, int maskUpdate, vector < int > &DP, ll sum) {
if (lvl == n) {
DP[maskUpdate] = min(DP[maskUpdate], DP[maskQuerry] + 1);
} else {
// 0
Back(lvl + 1, pwr_2 / 2, maskQuerry, maskUpdate, DP, sum);
// 1
if ((sum + cost[lvl]) <= g) {
Back(lvl + 1, pwr_2 / 2, maskQuerry, maskUpdate + pwr_2, DP, sum + cost[lvl]);
}
// 2
Back(lvl + 1, pwr_2 / 2, maskQuerry + pwr_2, maskUpdate + pwr_2, DP, sum);
}
}
int main() {
ifstream cin("zebughil.in");
ofstream cout("zebughil.out");
for (int test = 0; test < 3; ++test) {
cin >> n >> g;
cost.assign(n, 0);
for (int i = 0; i < n; ++i) {
cin >> cost[i];
}
const int lim_2 = 1 << n;
vector < int > DP(lim_2, n);
DP[0] = 0;
Back(0, lim_2 / 2, 0, 0, DP, 0);
cout << DP[(1 << n) - 1] << endl;
}
return 0;
}