public int maxTotalReward(int[] rewardValues) {
int n = rewardValues.length;
Arrays.sort(rewardValues);
int max = rewardValues[n - 1];
int[] dp = new int[max];
dp[0] = 1;
int ans = 0;
for (int i = 0; i < n; i++) {
int C = rewardValues[i];
for (int j = C -1; j >= 0; j--) {
if (dp[j] != 0) {
int cur = j + C;
ans = Math.max(cur, ans);
if (cur < max) {
dp[cur] = 1;
}
}
}
}
return ans;
}