Pagini recente » Borderou de evaluare (job #929488) | Borderou de evaluare (job #1782414) | Borderou de evaluare (job #1090589) | Borderou de evaluare (job #241520) | Cod sursa (job #2917272)
/// Preset de infoarena
#include <fstream>
using namespace std;
ifstream fin("zebughil.in");
ofstream fout("zebughil.out");
int dp[(1 << 18) + 5][20];
int v[20], n, g;
void solve()
{
fin >> n >> g;
for(int i = 0; i < n; i++) /// :(((
fin >> v[i];
for(int config = 0; config < (1 << n); config++)
for(int i = 1; i <= n; i++)
dp[config][i] = -1;
for(int i = 0; i < n; i++)
dp[(1 << i)][1] = g - v[i];
for(int config = 1; config < (1 << n); config++)
{
for(int i = 1; i <= n; i++)
{
if(dp[config][i] == -1)
continue;
for(int j = 0; j < n; j++)
{
if(config & (1 << j) != 0)
continue;
int newconfig = config + (1 << j);
if(v[j] <= dp[config][i])
dp[newconfig][i] = max(dp[newconfig][i], dp[config][i] - v[j]);
else
dp[newconfig][i + 1] = max(dp[newconfig][i + 1], g - v[j]);
}
}
}
for(int i = 1; i <= n; i++)
{
if(dp[(1 << n) - 1][i] != -1)
{
fout << i << '\n';
return;
}
}
}
int main()
{
for(int t = 1; t <= 3; t++)
solve();
return 0;
}