Pagini recente » Cod sursa (job #221607) | Cod sursa (job #1386155) | Cod sursa (job #1636122) | Cod sursa (job #2279621) | Cod sursa (job #2802671)
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const ll p2 = (1 << 17);
const ll N = 20;
ll MinG[p2];
ll Min[p2];
ll v[N];
void solve()
{
ll n, g, i;
cin >> n >> g;
for (i = 0; i < n; i++)
cin >> v[i];
for (ll msk = 1; msk < (1 << n); msk++)
MinG[msk] = Min[msk] = 1e16;
Min[0] = 1;
for (ll msk = 0; msk < (1 << n); msk++)
for (i = 0; i < n; i++)
if (!((1 << i) & msk))
{
ll msk2 = msk + (1 << i);
ll myG = v[i], myN = Min[msk] + 1;
if (MinG[msk] + v[i] <= g)
{
myN--;
myG += MinG[msk];
}
if (myN < Min[msk2] || (myN == Min[msk2] && myG < MinG[msk]))
{
Min[msk2] = myN;
MinG[msk2] = myG;
}
}
cout << Min[(1 << n) - 1] << '\n';
}
int main()
{
freopen("zebughil.in", "r", stdin);
freopen("zebughil.out", "w", stdout);
int t = 3;
while(t--)
solve();
return 0;
}