Cod sursa(job #2374679)

Utilizator Andrei-27Arhire Andrei Andrei-27 Data 7 martie 2019 19:56:33
Problema Zebughil Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in ("zebughil.in") ;
ofstream out ("zebughil.out") ;
int main()
{
    int t = 3 ;
    while ( t -- )
    {
    int64_t i , j , n , gmax , v [ 30 ] , l ,sum , nrel ,best,  bestnr ,nrpietre=0,nrcam=0;
    bool viz [ 30 ] ={0};
    in >> n >> gmax ;
    vector < int > st ;
    for ( i = 1 ; i <= n ; ++ i )       in >> v [ i ] ;
    l = ( 1 << n ) ;
    while ( nrpietre != n )
    {
        best = 0 ;
        bestnr =0 ;
    st.clear() ;
    for ( i = 1 , sum = 0 ; i < l ; ++ i , sum = 0 , nrel = 0 )
    {
        vector < int > stiva ;
    for ( j = 0 ; j < n ; ++ j )
    if ( i & ( 1 << j ) && !viz [ j + 1 ] )
    {
        sum += v [ j + 1 ] ;
        stiva.push_back(j+1) ;
        nrel ++ ;
    }
        if ( sum == best && nrel < bestnr )
        {
            st.clear() ;
            for ( size_t k = 0 ; k < stiva.size() ; ++ k )  st.push_back(stiva[k]) ;
            bestnr = nrel ;
        }

        if ( sum > best && sum <= gmax )
        {
            best = sum ;
            st.clear() ;
            for ( size_t k = 0 ; k < stiva.size() ; ++ k )  st.push_back(stiva[k]) ;
            bestnr = nrel ;
        }
    }
     for ( size_t k = 0 ; k < st.size() ; ++ k ) viz [ st [ k ] ] = 1 ;
     nrcam ++ ;
     nrpietre += st.size() ;
    }
    out << nrcam << '\n' ;
    }}