Pagini recente » Monitorul de evaluare | Cod sursa (job #1168880) | Cod sursa (job #144680) | Cod sursa (job #1574949) | Cod sursa (job #3281528)
#include <bits/stdc++.h>
#define int long long
#define cin ci
#define cout co
using namespace std;
ifstream cin("zebughil.in");
ofstream cout("zebughil.out");
const int INF = 1e9;
vector<pair<int, int>> dp;
int n, g;
vector<int> v;
int32_t main()
{
int k = 3;
while(k--)
{
cin >> n >> g;
v.resize(n+1);
dp.assign(1 << n, {INF, INF});
for(int i=0; i<n; i++)
cin >> v[i];
dp[0] = {1, 0};
for(int mask = 1; mask < (1 << n); mask++)
for(int i=0; i<n; i++)
{
if(mask & (1 << i))
{
pair<int, int> urm;
urm.first = dp[mask ^ (1 << i)].first + (dp[mask ^ (1 << i)].second + v[i] > g);
urm.second = (dp[mask ^ (1 << i)].second + v[i] > g) ? v[i] : dp[mask ^ (1 << i)].second + v[i];
if((urm.first == dp[mask].first && urm.second < dp[mask].second) || urm.first < dp[mask].first)
dp[mask] = urm;
}
}
cout << dp[(1 << n) - 1].first << '\n';
}
return 0;
}