Pagini recente » Cod sursa (job #483463) | Cod sursa (job #851008) | Cod sursa (job #1040239) | Cod sursa (job #2458892) | Cod sursa (job #3313809)
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define ll long long
#define ld long double
using namespace std;
using namespace __gnu_pbds;
typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;
ifstream fin("zebughil.in");
ofstream fout("zebughil.out");
const int NMAX = 17;
const int INF = 2e9;
int n, g;
int z[NMAX + 1];
pair<int, int> dp[1 << NMAX];
void test_case() {
fin >> n >> g;
for(int i = 1; i <= n; i++) {
fin >> z[i];
}
for(int mask = 0; mask < (1 << n); mask++) {
dp[mask] = {INF, INF};
}
dp[0] = {1, 0};
for(int mask = 1; mask < (1 << n); mask++) {
for(int i = 1; i <= n; i++) {
if(mask >> (i - 1) & 1) {
int before_mask = mask ^ (1 << (i - 1));
if((ll) dp[before_mask].second + z[i] <= g) {
dp[mask] = min(dp[mask], {dp[before_mask].first, dp[before_mask].second + z[i]});
}
else {
dp[mask] = min(dp[mask], {dp[before_mask].first + 1, z[i]});
}
}
}
}
fout << dp[(1 << n) - 1].first << '\n';
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t = 3;
while(t--) {
test_case();
}
return 0;
}