Titulo original
Implementación de código (consulte la solución para la primera parte del pincel y la parte de auto-resolución)
int cmp ( const void * a, const void * b)
{
return * ( int * ) a - * ( int * ) b;
}
int * largestDivisibleSubset ( int * nums, int numsSize, int * returnSize) {
qsort ( nums, numsSize, sizeof ( int ) , cmp) ;
int * dp = ( int * ) malloc ( sizeof ( int ) * ( numsSize+ 1 ) ) , i, j, pos = 0 , max = 0 ;
int * position = ( int * ) malloc ( sizeof ( int ) * ( numsSize+ 1 ) ) ;
dp[ 0 ] = 1 , position[ 0 ] = 0 ;
for ( i= 1 ; i< numsSize; i++ )
{
dp[ i] = 1 ;
position[ i] = i;
for ( j= 0 ; j< i; j++ )
{
if ( ! ( nums[ i] % nums[ j] ) )
{
if ( dp[ i] < dp[ j] + 1 ) position[ i] = j;
dp[ i] = fmax ( dp[ i] , dp[ j] + 1 ) ;
}
}
if ( dp[ i] > max)
{
pos = i;
max = dp[ i] ;
}
}
int * ret = ( int * ) malloc ( sizeof ( int ) * ( dp[ pos] ) ) ;
( * returnSize) = dp[ pos] ;
for ( i= dp[ pos] - 1 ; i>= 0 ; i-- )
{
ret[ i] = nums[ pos] ;
pos = position[ pos] ;
}
return ret;
}