Pagini recente » Cod sursa (job #1697276) | Cod sursa (job #1158538) | Cod sursa (job #1757824) | Cod sursa (job #1188127) | Cod sursa (job #3282113)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("zebughil.in");
ofstream g ("zebughil.out");
#define int long long
const int NMAX = 17, INF = 1e9;
int v[NMAX];
pair <int, int> dp[1 << NMAX];
int32_t main()
{
int tt = 3;
while(tt --)
{
int n, G;
f >> n >> G;
for(int i = 0; i < n; i ++)
{
f >> v[i];
}
for(int i = 0; i < (1 << n); i ++) dp[i] = {INF, INF};
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> aux;
aux.first = dp[mask - (1 << i)].first + (dp[mask - (1 << i)].second + v[i] > G);
aux.second = (dp[mask - (1 << i)].second + v[i] > G) ? v[i] : dp[mask - (1 << i)].second + v[i];
if((aux.first == dp[mask].first && aux.second < dp[mask].second) || aux.first < dp[mask].first)
{
dp[mask] = aux;
}
}
}
}
g << dp[(1 << n) - 1].first << '\n';
}
return 0;
}