第三题换了三种思路就是通过不了,最后一种10%。思路是backtrack穷举然后选最优解,递归时保留一个track剪枝。真的心力憔悴。用例都能过,自己又试了一些,一提交就是0%。结果最后一种方法删掉track直接在原数列上修改(每次删除一个)还能通过10%,这就让我很迷惑了。。 void backtrack(vector<int>& nums, int remain, int val, int thres, int k) { // // Base case if (remain <= 0) { res = max(val, res); return ; } for (int i = 0; i < nums.size(); i++) { int value = nums[i]; nums.erase(nums.begin() + i); if (value > thres) { backtrack(nums, remain - k - 1, val + value, thres, k); } else { backtrack(nums, remain - 1, val + value, thres, k); } nums.insert(nums.begin() + i, value); } }