Pagini recente » Cod sursa (job #233965) | Cod sursa (job #675621) | Cod sursa (job #854384) | Cod sursa (job #390908) | Cod sursa (job #2374679)
#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' ;
}}