2
public int minimumIncompatibility(int[] nums, int k) {5
int n = nums.length, INF = 100;6
int[][] dp = new int[1 << n][n];10
for (int i = 0; i < n; i++) {13
for (int i = 1; i < 1 << n; i++) {14
int c = Integer.bitCount(i);15
for (int j = 0; j < n && c % k == 0; j++) {16
for (int w = 0; w < n && (i & 1 << j) > 0; w++) {17
if ((i & 1 << w) == 0) {18
dp[i | 1 << w][w] = Math.min(dp[i | 1 << w][w], dp[i][j]);22
for (int j = 0; j < n && c % k != 0; j++) {23
for (int w = j + 1; w < n && (i & 1 << j) > 0; w++) {24
if ((i & 1 << w) == 0 && nums[w] != nums[j]) {25
dp[i | 1 << w][w] = Math.min(dp[i | 1 << w][w], dp[i][j] + nums[w] - nums[j]);30
int ans = Arrays.stream(dp[(1 << n) - 1]).min().getAsInt();31
return ans == INF ? -1 : ans;