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
26
27
28
|
#include <iostream>
#include <vector>
#include <algorithm>
class Solution {
public:
int maxTotalReward(std::vector<int>& rewardValues) {
std::sort(rewardValues.begin(), rewardValues.end());
int n = rewardValues.size();
int m = rewardValues.back();
std::vector<int> dp(2 * m);
dp[0] = 1;
for (int i : rewardValues) {
for (int j = 2 * i - 1; j >= i; --j) {
dp[j] |= dp[j - i];
}
}
for (int i = 2 * m - 1; i >= 0; --i) {
if (dp[i]) {
return i;
}
}
return -1;
}
};
|