| 12345678910111213141516171819202122232425262728293031 | func largestDivisibleSubset(nums []int) (res []int) {	n := len(nums)	if n <= 1 {		return nums	}	sort.Sort(sort.Reverse(sort.IntSlice(nums)))	dp, adj := make([]int, n), make([]int, n)	for i := 0; i < n; i++ {		dp[i], adj[i] = 1, -1	}	max, idx := 0, 0	for i := 1; i < n; i++ { // DP + math		for j := 0; j < i; j++ {			if nums[j]%nums[i] != 0 {				continue			}			if dp[i] < dp[j]+1 {				dp[i], adj[i] = dp[j]+1, j			}			if max < dp[i] {				max, idx = dp[i], i			}		}	}	for adj[idx] != -1 {		res = append(res, nums[idx])		idx = adj[idx]	}	return append(res, nums[idx])}
 |