3180. Maximum Total Reward Using Operations I
Description
You are given an integer array rewardValues
of length n
, representing the values of rewards.
Initially, your total reward x
is 0, and all indices are unmarked. You are allowed to perform the following operation any number of times:
- Choose an unmarked index
i
from the range[0, n - 1]
. - If
rewardValues[i]
is greater than your current total rewardx
, then addrewardValues[i]
tox
(i.e.,x = x + rewardValues[i]
), and mark the indexi
.
Return an integer denoting the maximum total reward you can collect by performing the operations optimally.
Example 1:
Input: rewardValues = [1,1,3,3]
Output: 4
Explanation:
During the operations, we can choose to mark the indices 0 and 2 in order, and the total reward will be 4, which is the maximum.
Example 2:
Input: rewardValues = [1,6,4,3,2]
Output: 11
Explanation:
Mark the indices 0, 2, and 1 in order. The total reward will then be 11, which is the maximum.
Constraints:
1 <= rewardValues.length <= 2000
1 <= rewardValues[i] <= 2000
Solutions
Solution 1: Sorting + Memoization + Binary Search
We can sort the rewardValues
array and then use memoization to solve for the maximum total reward.
We define a function $\textit{dfs}(x)$, representing the maximum total reward that can be obtained when the current total reward is $x$. Thus, the answer is $\textit{dfs}(0)$.
The execution process of the function $\textit{dfs}(x)$ is as follows:
- Perform a binary search in the
rewardValues
array for the index $i$ of the first element greater than $x$; - Iterate over the elements in the
rewardValues
array starting from index $i$, and for each element $v$, calculate the maximum value of $v + \textit{dfs}(x + v)$. - Return the result.
To avoid repeated calculations, we use a memoization array f
to record the results that have already been computed.
The time complexity is $O(n \times (\log n + M))$, and the space complexity is $O(M)$. Where $n$ is the length of the rewardValues
array, and $M$ is twice the maximum value in the rewardValues
array.
1 2 3 4 5 6 7 8 9 10 11 12 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|