给你一个整数数组 nums
和三个整数 k
、op1
和 op2
。
你可以对 nums
执行以下操作:
i
,将 nums[i]
除以 2,并 向上取整 到最接近的整数。你最多可以执行此操作 op1
次,并且每个下标最多只能执行一次。i
,仅当 nums[i]
大于或等于 k
时,从 nums[i]
中减去 k
。你最多可以执行此操作 op2
次,并且每个下标最多只能执行一次。注意: 两种操作可以应用于同一下标,但每种操作最多只能应用一次。
返回在执行任意次数的操作后,nums
中所有元素的 最小 可能 和 。
示例 1:
输入: nums = [2,8,3,19,3], k = 3, op1 = 1, op2 = 1
输出: 23
解释:
nums[1] = 8
应用操作 2,使 nums[1] = 5
。nums[3] = 19
应用操作 1,使 nums[3] = 10
。[2, 5, 3, 10, 3]
,在应用操作后具有最小可能和 23。示例 2:
输入: nums = [2,4,3], k = 3, op1 = 2, op2 = 1
输出: 3
解释:
nums[0] = 2
应用操作 1,使 nums[0] = 1
。nums[1] = 4
应用操作 1,使 nums[1] = 2
。nums[2] = 3
应用操作 2,使 nums[2] = 0
。[1, 2, 0]
,在应用操作后具有最小可能和 3。
提示:
1 <= nums.length <= 100
0 <= nums[i] <= 105
0 <= k <= 105
0 <= op1, op2 <= nums.length