这相当于就是挑选8 15 10 20 8 分别放到 k 个位置中去,然后排列出所有的 组合!
图1:8可以进入 1 2号位置,15分别对应其下的位置!依次类推!回溯就是将元素从1号位 放到 2号位…上!
java:回溯
class Solution {
private int ans = Integer.MAX_VALUE;
public void dfs(int index, int[] v, int n, int k, int[] cookies){
if (index == n){
int maxv = 0;
for (int i = 0; i < k; ++i){
maxv = Math.max(maxv, v[i]);
}
ans = Math.min(maxv, ans);
return;
}
for (int i = 0; i < k; ++i){ // 回到第二层去看,就是横向遍历
if(v[i] + cookies[index] >= ans) continue;
v[i] += cookies[index];
dfs(index + 1, v, n, k, cookies);
v[i] -= cookies[index];
}
}
public int distributeCookies(int[] cookies, int k) {
dfs(0, new int[k], cookies.length, k, cookies);
return ans;
}
}