Pagini recente » Cod sursa (job #1510265) | Cod sursa (job #27436) | Cod sursa (job #1761877) | Cod sursa (job #2077100) | Cod sursa (job #1016572)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
const int Nmax = 17;
int A[Nmax];
int D[1 << Nmax][Nmax];
int N, G;
int solve()
{
D[0][0] = G;
for ( int i = 0; i < ( 1 << N ); ++i )
{
for ( int j = 0; j < N; ++j )
{
for ( int k = 0; k < N; ++k )
{
if ( D[i][j] != -1 && ( ( i & ( 1 << k ) ) == 0 ) )
{
if ( D[i][j] >= A[k] )
{
D[i | ( 1 << k )][j] = max( D[i | ( 1 << k )][j], D[i][j] - A[k] );
}
else
{
D[i | ( 1 << k )][j + 1] = max( D[i | ( 1 << k )][j + 1],G - A[k] );
}
}
}
}
}
for ( int i = 0; i < N; ++i )
{
if ( D[( 1 << N ) - 1][i] != -1 )
{
return i + 1;
}
}
return 1;
}
int main()
{
ifstream f("zebughil.in");
ofstream g("zebughil.out");
for ( int k = 0; k < 3; ++k )
{
memset( D, -1, sizeof( D ) );
f >> N >> G;
for ( int i = 0; i < N; ++i )
f >> A[i];
g << solve() << "\n";
}
return 0;
}