Cod sursa(job #2294530)

Utilizator Andrei-27Arhire Andrei Andrei-27 Data 2 decembrie 2018 15:33:24
Problema Ghiozdan Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std ;

const int GMAX = 75005 ;
const int NMAX = 20005 ; 

ifstream f ("ghiozdan.in") ;
ofstream g ("ghiozdan.out") ;

vector < int > v ( GMAX , ( 1 << 25 ) ) ;
vector < int > l ( GMAX , -1 ) ;
vector < int > lista [ NMAX ] ;

int n , G ;



int main ()
{
    f >> n >> G ;
    v [ 0 ] = 0 ;
    
    for ( int i = 1 ; i <= n ; ++ i )
    {
        int x ; f >> x ;
        
        for ( int k = G ; k - x >= 0 ; k -- )    if ( v [ k - x ] + 1 < v [ k ] )    
        
        {
            v [ k ] = v [ k - x ] + 1 , l [ k ] = k - x ;
            while ( !lista [k].empty() )    lista[k].pop_back();
            int p = k ;
            while ( p != -1 )
            {
                if ( l [ p ] == -1 ) break ;
                lista[ k ].push_back( p - l [ p ] ); 
                p = l [ p ] ;
            }
        }
        
        
            
    }
    
    for ( int k  = G ; k >= 0 ; k -- )
    {
        if ( v [ k ] != ( 1 << 25 ) )
        {
            f << k << " " << v [ k ] << "\n" ;
            for ( auto vecin : lista [ k ] )    f << vecin << "\n" ;
            break ;
        }
        
    }
    
    
    
    return 0 ;
}