Cod sursa(job #2199559)

Utilizator Dobricean_IoanDobricean Ionut Dobricean_Ioan Data 28 aprilie 2018 11:47:18
Problema Zebughil Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#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]};
			}
		}
}