Pagini recente » Cod sursa (job #647596) | Cod sursa (job #455032) | Cod sursa (job #520851) | Cod sursa (job #3030141) | Cod sursa (job #1824306)
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 17;
struct Stuff {
int mintr, spleft;
bool operator < (const Stuff &other) const {
if (mintr == other.mintr)
return spleft > other.spleft;
return mintr < other.mintr;
}
} dp[1 << MAXN];
inline Stuff minim(Stuff A, Stuff B) {
if (A < B)
return A;
return B;
}
int z[MAXN];
int main()
{
int n, g, aux;
ifstream fin("zebughil.in");
ofstream fout("zebughil.out");
for (int t = 0; t < 3; ++t) {
for (int i = 1; i < (1 << (MAXN - 1)); ++i)
dp[i] = {MAXN, 0};
fin >> n >> g;
for (int i = 0; i < n; ++i)
fin >> z[i];
dp[0] = {0, 0};
for (int conf = 1; conf < (1 << n); ++conf)
for (int i = 0; i < n; ++i)
if ((1 << i) & conf) {
aux = conf - (1 << i);
if (dp[aux].spleft >= z[i])
dp[conf] = minim(dp[conf], {dp[aux].mintr, dp[aux].spleft - z[i]});
else
dp[conf] = minim(dp[conf], {dp[aux].mintr + 1, g - z[i]});
}
fout << dp[(1 << n) - 1].mintr << '\n';
}
fin.close();
fout.close();
return 0;
}