Pagini recente » Autentificare | Istoria paginii utilizator/nicoleta.baisanu | Cod sursa (job #1777537) | Cod sursa (job #228424) | Cod sursa (job #3229040)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 17;
const ll INF = 1e18;
ll dp[1 << N][N];
ll n, g, z[N];
void solve() {
cin >> n >> g;
for (int i = 0; i < n; ++i) {
cin >> z[i];
}
for (int mask = 0; mask < (1 << n); ++mask) {
for (int cnt = 0; cnt <= n; ++cnt) {
dp[mask][cnt] = INF;
}
}
dp[0][0] = 0;
for (int mask = 1; mask < (1 << n); ++mask) {
for (int cnt = 1; cnt <= n; ++cnt) {
for (int b = 0; b < n; ++b) {
if (mask & (1 << b)) {
if (dp[mask ^ (1 << b)][cnt] + z[b] <= g) {
dp[mask][cnt] = min(dp[mask][cnt], dp[mask ^ (1 << b)][cnt] + z[b]);
}
if (dp[mask ^ (1 << b)][cnt - 1] != INF) {
dp[mask][cnt] = min(dp[mask][cnt], z[b]);
}
}
}
}
}
for (int cnt = 1; cnt <= n; ++cnt) {
if (dp[(1 << n) - 1][cnt] != INF) {
cout << cnt << '\n';
return;
}
}
}
int main() {
freopen("zebughil.in", "r", stdin);
freopen("zebughil.out", "w", stdout);
int t = 3;
while (t--) {
solve();
}
return 0;
}