Pagini recente » Cod sursa (job #1920425) | Cod sursa (job #359163) | Cod sursa (job #2828529) | Cod sursa (job #2938696) | Cod sursa (job #2334231)
#include <bits/stdc++.h>
using namespace std;
ifstream in("zebughil.in");
ofstream out("zebughil.out");
const int N = 18;
int v[N],dp[1<<N][N];
int main()
{
int t = 3;
while (t--)
{
int n;
long long g;
in >> n >> g;
for (int i = 0; i<(1<<n); i++)
for (int j = 0; j<=n; j++)
dp[i][j] = -1;
for (int i = 0; i<n; i++)
in >> v[i];
dp[0][0] = 0;
for (int i = 0; i<(1<<n); i++)
for (int j = 0; j<=n; j++)
if (dp[i][j]!=-1)
for (int k = 0; k<n && i+(1<<k)<=(1<<n); k++)
if ((i&(1<<k)) == 0)
{
int l = i+(1<<k);
if (dp[i][j]>=v[k])
dp[l][j] = max(dp[l][j],dp[i][j]-v[k]);
else
dp[l][j+1] = g-v[k];
}
for (int i = 0; i<=n; i++)
if (dp[(1<<n)-1][i]!=-1)
{
out << i << "\n";
break;
}
}
}