Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <vector>
- #include <algorithm>
- class combSet {
- public:
- void add(int a) {
- tab.push_back(a);
- }
- int calculate() {
- go_step(0, -1);
- return get_max();
- }
- private:
- void go_step(int sum, int i) {
- if ( i >= (int)tab.size()-1) {
- sums.push_back(sum);
- return;
- }
- go_step(sum + tab[i+1], i+1);
- if (i < (int)tab.size()-2)
- go_step(sum + tab[i+2], i+2);
- else
- go_step(sum, i+2);
- }
- int get_max() {
- return *std::max_element(sums.begin(), sums.end());
- }
- std::vector<int> tab;
- std::vector<int> sums;
- };
- int downStairs(const int T[], unsigned n) {
- int sum = 0;
- std::cout << "n = " << n << std::endl;
- for (auto i = 0u; i < n; i++) {
- if (T[i] >= 0)
- sum += T[i];
- else {
- combSet test;
- while (T[i] < 0 && i < n) {
- test.add(T[i]);
- i++;
- }
- sum += test.calculate();
- i--;
- }
- }
- return sum;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement