关于徒步旅行中的补给问题有误的点,其中样例1的输出最佳值应该是8?
function fdr(data) {
return data.reduce((prev, c,index) => {
if(prev.isPass && (prev.count+c) < (index+1)) {
prev.isPass = false;
} else {
prev.count += c;
}
return prev;
}, {count:0,isPass: true}).isPass
};
function dr(data, l) {
return data.map((items) => items.reduce((p, i,idx) => {
p.count += i*l[idx];
p.list.push(i);
return p;
},{count: 0, list: []}));
};
function findCombinations(n, k, data) {
const list = [];
const result = [];
function backtrack(digits, index, sum) {
// 如果已经到达最后一位数字,并且总和等于5,保存这个组合
if (index === n) {
if (sum === n) {
list.push(digits.slice());
}
return;
}
// 尝试每一位的可能值:0, 1, 2
for (let i = 0; i <= k; i++) {
digits.push(i);
if(fdr(digits)) {
backtrack(digits, index + 1, sum + i);
}
digits.pop(); // 回溯,移除最后一位数字
}
}
backtrack([], 0, 0); // 从第一位数字开始,总和为0
return dr(list, data).sort((a,b) => a.count-b.count)[0];
}
console.log(findCombinations(5, 2,[1, 2, 3, 3, 2])); // 8,题目样例1中输出给的是 9
console.log(findCombinations(6, 3, [4, 1, 5, 2, 1, 3])); // 9
console.log(findCombinations(4, 1, [3, 2, 4, 1])); // 10