Pagini recente » Rating Dica si atat (Dica122) | Cod sursa (job #153231) | Cod sursa (job #1691229) | Cod sursa (job #1864652) | Cod sursa (job #1336277)
/*
* Code by Spiromanul
*/
# include "fstream"
# include "cstring"
# include "vector"
# include "queue"
# include "bitset"
# include "deque"
# include "cstdlib"
const char IN [ ] = "ghiozdan.in" ;
const char OUT [ ] = "ghiozdan.out" ;
const int MAX = 76099 ;
const int MIN = 300 ;
# define pb push_back
# define mp make_pair
# define FORN( a , b , c ) for ( int a = b ; a <= c ; ++ a )
# define FORNBACK( a , b , c ) for ( int a = b ; a >= c ; -- a )
# define read(a) cin>>a
# define write(a) cout<<a<<'\n'
using namespace std;
ifstream cin ( IN ) ;
ofstream cout ( OUT ) ;
int fv [ MIN ] , dp [ MAX ] ;
int BOSS [ MAX ] ;
int main ( void )
{
int n , MAXX ;
read ( n ) ; read ( MAXX ) ;
FORN ( i , 1 , n )
{
int x ;
read ( x ) ;
fv [ x ] ++ ;
}
dp [ 0 ] = 1 ;
FORNBACK ( i , 200 , 0 )
if ( fv [ i ] )
{
for ( int j = MAX ; j >= 0 ; -- j )
if ( dp [ j ] )
{
for ( int k = 1 ; k <= fv [ i ] and j + k * i <= MAXX ; ++ k )
{
if ( dp [ j + k * i ] ) break ;
dp [ j + k * i ] = dp [ j ] + k ;
BOSS [ j + k * i ] = i ;
}
}
}
FORNBACK ( i , MAXX , 0 )
if ( dp [ i ] )
{
cout << i << ' ' << dp [ i ] - 1 << '\n' ;
while ( i )
{
write( BOSS [ i ] ) ;
i -= BOSS [ i ] ;
}
exit ( 0 ) ;
}
return 0;
}