Pagini recente » Cod sursa (job #2904373) | Cod sursa (job #2068270) | Cod sursa (job #1665265) | Cod sursa (job #1638638) | Cod sursa (job #1396607)
#include <fstream>
#include <cstring>
#include <algorithm>
using namespace std;
ifstream fin("zebughil.in");
ofstream fout("zebughil.out");
int N, G;
int B[20], dp[(1 << 17) + 5][20];
void solve()
{
dp[0][1] = G;
for (int mask = 1; mask <= (1 << N) - 1; ++mask)
{
for (int j = 1; j <= N; ++j)
{
for (int k = 1; k <= N; ++k)
{
if (dp[mask - (1 << (k - 1))][j] != -1 && (mask & (1 << (k - 1))))
{
if (dp[mask - (1 << (k - 1))][j] >= B[k])
dp[mask][j] = max(dp[mask][j], dp[mask - (1 << (k - 1))][j] - B[k]);
else
dp[mask][j + 1] = max(dp[mask][j + 1], G - B[k]);
}
}
}
}
for (int i = 1; i <= N + 1; ++i)
if (dp[(1 << N) - 1][i] != -1)
{
fout << i << '\n';
break;
}
}
int main()
{
for (int t = 1; t <= 3; ++t)
{
fin >> N >> G;
for (int i = 1; i <= N; ++i)
fin >> B[i];
memset(dp, -1, sizeof(dp));
solve();
}
fin.close();
fout.close();
return 0;
}