Pagini recente » Cod sursa (job #150829) | Cod sursa (job #2437617) | Cod sursa (job #2748057) | Cod sursa (job #737863) | Cod sursa (job #2294532)
#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 ) )
{
g << k << " " << v [ k ] << "\n" ;
for ( auto vecin : lista [ k ] ) g << vecin << "\n" ;
break ;
}
}
return 0 ;
}