Cod sursa(job #2338470)

Utilizator Andrei-27Arhire Andrei Andrei-27 Data 7 februarie 2019 15:23:12
Problema Zebughil Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.27 kb
#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 ;
}