Pagini recente » Cod sursa (job #1633629) | Cod sursa (job #842995) | Cod sursa (job #1436112) | Cod sursa (job #1293201) | Cod sursa (job #3282099)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("zebughil.in");
ofstream g ("zebughil.out");
const long long NMAX = 17, INF = 1e9;
long long v[NMAX];
long long dp[1 << NMAX];
long long rem[1 << NMAX];
int main()
{
//ios_base :: sync_with_stdio(false);
//cin.tie(NULL);
long long tt = 3;
while(tt --)
{
long long n, G;
f >> n >> G;
for(long long i = 0; i < n; i ++)
{
f >> v[i];
}
dp[0] = rem[0] = 0;
for(long long mask = 1; mask < (1 << n); mask ++) dp[mask] = rem[mask] = INF;
for(long long mask = 0; mask < (1 << n); mask ++)
{
for(long long i = 0; i < n; i ++)
{
if((mask & (1 << i)) == 0)
{
long long aux = dp[mask] + (rem[mask] + v[i] > G);
if(aux < dp[mask + (1 << i)])
{
dp[mask + (1 << i)] = aux;
if(rem[mask] + v[i] > G) rem[mask + (1 << i)] = rem[mask] + v[i] - G;
else rem[mask + (1 << i)] = rem[mask] + v[i];
}
else if(aux == dp[mask + (1 << i)])
{
aux = rem[mask] + v[i];
if(aux > G) aux -= G;
rem[mask + (1 << i)] = min(rem[mask + (1 << i)], aux);
}
}
}
}
g << dp[(1 << n) - 1] + 1 << '\n';
}
return 0;
}