classSolution { public: intmaxTotalReward(vector<int>& rewardValues){ sort(rewardValues.begin(), rewardValues.end()); int n = unique(rewardValues.begin(), rewardValues.end()) - rewardValues.begin(); bitset<4001> f; f[0] = 1; int m = 0; for (int i = 0; i < n; ++i) m = max(m, rewardValues[i]); m = m * 2 - 1; for (int i = 0; i < n; ++i) { int x = rewardValues[i]; bitset<4001> t; t.flip(); f |= ((t >> (4001 - x)) & f) << x; } for (int j = m; j >= 0; --j) { if (f[j]) return j; } return0; } };