Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- void getMaximumSum(int index, int sum, int lastInc, int &maxSum, vector<int> &v){
- if(index >= v.size()){
- maxSum = max(maxSum, sum);
- return;
- }
- //select the number
- if(lastInc == -1 || lastInc < index - 1){
- getMaximumSum(index + 1, sum + v[index], index, maxSum, v);
- }
- //don't select the number
- getMaximumSum(index + 1, sum, lastInc, maxSum, v);
- }
- int getMaximumSumMemo(int index, int lastInc, vector<int> &v, vector<vector<int> > &memo){
- if(index >= v.size()){
- return 0;
- }
- if(lastInc != -1 && memo[index][lastInc] != -1){
- return memo[index][lastInc];
- }
- int selected = 0, notSelected = 0;
- // select the number
- if(lastInc == -1 || lastInc < index - 1){
- selected = v[index] + getMaximumSumMemo(index + 1, index, v, memo);
- }
- notSelected = getMaximumSumMemo(index + 1, lastInc, v, memo);
- if(lastInc != -1){
- memo[index][lastInc] = max(selected, notSelected);
- }
- return max(selected, notSelected);
- }
- int getMaximumSumMemoOptimisedSpace(int index, int lastInc, vector<int> &v, vector<vector<int> > &memo){
- if(index >= v.size()){
- return 0;
- }
- int selected = 0, notSelected = 0;
- if(memo[index][lastInc] != -1){
- return memo[index][lastInc];
- }
- //selected
- if(lastInc == 0){
- selected = v[index] + getMaximumSumMemoOptimisedSpace(index + 1, 1, v, memo);
- }
- //not selected
- notSelected = getMaximumSumMemoOptimisedSpace(index + 1, 0, v, memo);
- return memo[index][lastInc] = max(selected, notSelected);
- }
- int main() {
- // your code goes here
- int n;
- cin >> n;
- vector<int> v(n);
- for(int i = 0; i < n; i++){
- cin >> v[i];
- }
- /*
- Recursive Call
- int maxSum = 0;
- getMaximumSum(0, 0, -1, maxSum, v);
- cout << maxSum << '\n';
- */
- /*
- Memo Call
- vector<vector<int> > memo(n, vector<int>(n, -1));
- cout << getMaximumSumMemo(0, -1, v, memo) << '\n';
- */
- /*
- Memo Call Optimised
- */
- vector<vector<int> > memo(n, vector<int>(2, -1));
- cout << getMaximumSumMemoOptimisedSpace(0, 0, v, memo);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement