原题题目
代码实现(首刷部分看解部分自解)
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;
}