/* Leetcode 1696: Jump-Game-VI. James S. Plank. Please see the accompanying writeup for how this works. */ /* Runtime: 535 ms, faster than 13.56% of C++ online submissions for Jump Game VI. Memory Usage: 135.8 MB, less than 5.44% of C++ online submissions for Jump Game VI. */ #include #include #include using namespace std; class Solution { public: int maxResult(vector& nums, int k); }; int Solution::maxResult(vector& nums, int k) { vector cache; multiset window; // This holds cache[i+1] through cache[min(i+k,n-1)]. int i, j; cache.resize(nums.size()); for (i = nums.size()-1; i >= 0; i--) { if (i == nums.size()-1) { cache[i] = nums[i]; } else { cache[i] = nums[i] + *(window.rbegin()); } window.insert(cache[i]); if (window.size() > k) { window.erase(window.find(cache[i+k])); } } return cache[0]; } int main(int argc, char **argv) { int k; vector nums; Solution s; while (cin >> k) nums.push_back(k); nums.pop_back(); cout << s.maxResult(nums, k) << endl; return 0; }