Pagini recente » Cod sursa (job #1238537) | oni2012_ziua2_plus_baraj | Cod sursa (job #721635) | Cod sursa (job #1083149) | Cod sursa (job #2840495)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("zebughil.in");
ofstream fout("zebughil.out");
int dp[1 << 18][2];
int a[20];
int n, G;
void Solve()
{
int i;
dp[0][0] = G;
dp[0][1] = 1;
int N = (1 << n), stare;
for(stare = 1; stare <= N; stare++)
dp[stare][1] = 20;
for(stare = 1;stare <= N;stare++)
for(i = 0;i < n;i++)
if((stare & (1 << i)))
{
int masca = (stare ^ (1 << i));
if(dp[stare][1] > dp[masca][1])
{
if(dp[masca][0] >= a[i])
{
dp[stare][1] = dp[masca][1];
dp[stare][0] = dp[masca][0] - a[i];
}
}
if(dp[stare][1] > dp[masca][1] + 1)
{
dp[stare][1] = dp[masca][1] + 1;
dp[stare][0] = G - a[i];
}
else if(dp[stare][1] == dp[masca][1])
dp[stare][0] = max(dp[stare][0], dp[masca][0] - a[i]);
}
fout << dp[N - 1][1] << "\n";
}
void Citire()
{
int t = 3, i;
while(t--)
{
fin >> n >> G;
for(i = 0;i < n;i++)
fin >> a[i];
Solve();
}
}
int main()
{
Citire();
return 0;
}