Kako se ovo rješava? DP?
S ovim sam ja pokušao( counting change )
int N, K;
int dp[50001], c[101];
scanf( "%d %d", &N, &K );
FOR( 0, N ) scanf( "%d", &c[i] );
fill( dp, dp+K+1, INT_MAX );
dp[0] = 0;
for( int i = 0; i < N; ++i )
for( int j = 1; j <= K; ++j )
if( c[i] <= j )
dp[j] <?= ( dp[j-c[i]] + 1 );
if( dp[K] == INT_MAX ) printf( "-1" );
else printf( "%d\n", dp[K] );
S ovim sam ja pokušao( counting change )
int N, K;
int dp[50001], c[101];
scanf( "%d %d", &N, &K );
FOR( 0, N ) scanf( "%d", &c[i] );
fill( dp, dp+K+1, INT_MAX );
dp[0] = 0;
for( int i = 0; i < N; ++i )
for( int j = 1; j <= K; ++j )
if( c[i] <= j )
dp[j] <?= ( dp[j-c[i]] + 1 );
if( dp[K] == INT_MAX ) printf( "-1" );
else printf( "%d\n", dp[K] );