Pagini recente » Cod sursa (job #2895750) | Cod sursa (job #2642589) | Cod sursa (job #686284) | Cod sursa (job #732011) | Cod sursa (job #3191094)
#include <bits/stdc++.h>
using namespace std;
const long long max_size = 20, max_c = (1 << 17) + 20, INF = 1e18 + 1;
pair <int, long long> dp[max_c];
/// first - numaru de camioane minim pt conf, second - restu minim pt nr min camioane
long long v[max_c];
void solve ()
{
long long n, w;
cin >> n >> w;
for (long long i = 1; i <= n; i++)
{
cin >> v[i];
}
for (long long i = 1; i < (1 << n); i++)
{
dp[i].first = n + 1;
}
dp[0].first = 1;
for (long long i = 0; i < (1 << n); i++)
{
for (long long j = 0; j < n; j++)
{
if ((i & (1 << j)) != 0)
{
continue;
}
long long ct = dp[i].first, val = dp[i].second + v[j + 1];
if (val > w)
{
val = v[j + 1];
ct++;
}
dp[(i ^ (1 << j))] = min(dp[(i ^ (1 << j))], {ct, val});
}
}
cout << dp[(1 << n) - 1].first;
cout << '\n';
}
signed main ()
{
#ifdef LOCAL
freopen("test.in", "r", stdin);
freopen("test.out", "w", stdout);
#else
freopen("zebunghil.in", "r", stdin);
freopen("zebunghil.out", "w", stdout);
#endif // LOCAL
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
long long t;
//cin >> t;
t = 3;
while (t--)
{
solve();
}
return 0;
}