Pagini recente » Cod sursa (job #1677942) | Cod sursa (job #1587178) | Cod sursa (job #855899) | Cod sursa (job #955484) | Cod sursa (job #2338470)
#include <bits/stdc++.h>
#define pb push_back
using namespace std ;
ifstream in ("zebughil.in") ;
ofstream out ("zebughil.out") ;
int64_t st [ 20 ] , n , best , nrtrucks , nrstones , g [ 20 ] , gmax ;
bool viz [ 20 ] ;
vector < int > ans ;
void print ( int k )
{
int64_t s = 0 ;
for ( int i = 1 ; i <= k ;++ i )
{
s += g [ st [ i ] ] ;
}
if ( s <= gmax && s > best )
{
best = s , ans.clear() ;
for (int i = 1 ; i <= k ; ++ i ) ans.pb( st [ i ] ) ;
}
}
void bt ( int n , int k , int i , int64_t sum )
{
for ( int j = i ; j <= n ; ++ j )
{
if ( !viz [ j ] && sum + g [ j ] <= gmax )
st [ k ] = j , print( k ) , bt ( n , k + 1 , j + 1 , sum + g [ j ] ) ;
}
}
int main ()
{
int t = 3 ;
while ( t -- )
{
nrtrucks = 0 , nrstones = 0 , best = 0 ;
in >> n >> gmax ;
for ( int i = 1 ; i <= n ; ++ i ) in >> g [ i ] , viz [ i ] = false ;
while ( nrstones != n )
{
bt ( n , 1 , 1 , 0 ) ;
best = 0 ;
nrstones += ans.size() ;
while ( ans.size() ) viz [ ans.back() ] = true , ans.pop_back() ;
nrtrucks ++ ;
}
out << nrtrucks << '\n' ;
}
return 0 ;
}