Pagini recente » Cod sursa (job #816227) | Cod sursa (job #348385) | Cod sursa (job #1726065) | Cod sursa (job #901176) | Cod sursa (job #2199559)
#define c first
#define ramas second
#include <fstream>
#include <cstring>
#include <bitset>
using namespace std;
ifstream fin ("zebughil.in");
ofstream fout ("zebughil.out");
const int Dim = 18;
pair < int , int > D[1 << Dim];
int n,g,A[Dim];
void Dynamic();
int main() {
for ( int t = 1; t <= 3; ++t) {
fin >> n >> g;
for ( int i = 1; i <= n; ++i)
fin >> A[i];
memset(D,0,sizeof(D));
Dynamic();
fout << D[ (1 << n) - 1].c << "\n";
}
}
void Dynamic(){
for(int i = 0; i < 1 << n; ++i) {
for ( int j = 1; j <= n; ++j) {
if ( (( 1 << (j - 1) ) & i) == (1 << (j-1)) )
continue;
if ( D[i].ramas >= A[j] )
D[(i | ( 1 << (j - 1) )) ] = {D[i].c,D[i].ramas - A[j]};
else
D[ (i | ( 1 << ( j - 1))) ] = {D[i].c + 1, g - A[j]};
}
}
}