Pagini recente » Cod sursa (job #1408167) | Cod sursa (job #2918179) | Cod sursa (job #3207490) | Cod sursa (job #34612) | Cod sursa (job #2245142)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("zebughil.in");
ofstream out("zebughil.out");
const int NMAX = 18;
int n, g;
int v[NMAX];
int dp[NMAX][1 << NMAX];
void clear_data() {
for(int i = 0; i < n; i++)
for(int j = 0; j < (1 << n); j++)
dp[i][j] = -1;
}
int solve() {
dp[0][0] = 0;
for(int i = 0; i <= n; i++) {
for(int val = 0; val < (1 << n); val++) {
if(dp[i][val] < 0)
continue;
dp[i + 1][val] = g;
for(int k = 0; k < n; k++)
if(!(val & (1 << k)))
if(dp[i][val] - v[k] >= 0)
dp[i][val | (1 << k)] = max(dp[i][val | (1 << k)], dp[i][val] - v[k]);
}
if(dp[i][(1 << n) - 1] >= 0)
return i;
}
return n;
}
int main()
{
for(int test = 1; test <= 3; test++) {
in >> n >> g;
for(int i = 0; i < n; i++)
in >> v[i];
clear_data();
out << solve() << '\n';
}
in.close();
out.close();
return 0;
}