Pagini recente » Cod sursa (job #2664015) | Cod sursa (job #1157802) | Cod sursa (job #2665174) | Cod sursa (job #1844526) | Cod sursa (job #3175139)
#include <fstream>
int vec[18], dp[1 << 17][18];
int main() {
std::ifstream fin("zebughil.in");
std::ofstream fout("zebughil.out");
for (int cnt = 0; cnt < 3; ++cnt) {
int n, g;
fin >> n >> g;
for (int i = 1; i <= n; ++i)
fin >> vec[i];
for (int i = 1; i <= (1 << n) - 1; ++i) {
dp[i][0] = -1;
for (int j = 1; j <= n; ++j) {
dp[i][j] = -1;
for (int k = 1; k <= n; ++k)
if ((i & 1 << k - 1) > 0 && dp[i - (1 << k - 1)][j - 1] != -1)
dp[i][j] = std::max(dp[i][j], g - vec[k]);
else if ((i & 1 << k - 1) > 0 && dp[i - (1 << k - 1)][j] >= vec[i])
dp[i][j] = std::max(dp[i][j], dp[i - (1 << k - 1)][j] - vec[k]);
}
}
int sol = -1;
for (int i = 1; i <= n && sol == -1; ++i)
if (dp[(1 << n) - 1][i] != -1)
sol = i;
fout << sol << "\n";
}
return 0;
}