Advertisement
Fastrail08

Maximum sum Non Adjacent Element

Jun 17th, 2025
370
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.26 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. void getMaximumSum(int index, int sum, int lastInc, int &maxSum, vector<int> &v){
  5.     if(index >= v.size()){
  6.         maxSum = max(maxSum, sum);
  7.         return;
  8.     }
  9.     //select the number
  10.     if(lastInc == -1 || lastInc < index - 1){
  11.         getMaximumSum(index + 1, sum + v[index], index, maxSum, v);
  12.     }
  13.    
  14.     //don't select the number
  15.     getMaximumSum(index + 1, sum, lastInc, maxSum, v);
  16. }
  17.  
  18. int getMaximumSumMemo(int index, int lastInc, vector<int> &v, vector<vector<int> > &memo){
  19.     if(index >= v.size()){
  20.         return 0;
  21.     }
  22.     if(lastInc != -1 && memo[index][lastInc] != -1){
  23.         return memo[index][lastInc];
  24.     }
  25.     int selected = 0, notSelected = 0;
  26.     // select the number
  27.     if(lastInc == -1 || lastInc < index - 1){
  28.         selected = v[index] + getMaximumSumMemo(index + 1, index, v, memo);
  29.     }
  30.     notSelected = getMaximumSumMemo(index + 1, lastInc, v, memo);
  31.     if(lastInc != -1){
  32.         memo[index][lastInc] = max(selected, notSelected);
  33.     }
  34.     return max(selected, notSelected);
  35. }
  36.  
  37. int getMaximumSumMemoOptimisedSpace(int index, int lastInc, vector<int> &v, vector<vector<int> > &memo){
  38.     if(index >= v.size()){
  39.         return 0;
  40.     }
  41.     int selected = 0, notSelected = 0;
  42.     if(memo[index][lastInc] != -1){
  43.         return memo[index][lastInc];
  44.     }
  45.     //selected
  46.     if(lastInc == 0){
  47.         selected = v[index] + getMaximumSumMemoOptimisedSpace(index + 1, 1, v, memo);
  48.     }
  49.    
  50.     //not selected
  51.     notSelected = getMaximumSumMemoOptimisedSpace(index + 1, 0, v, memo);
  52.    
  53.     return memo[index][lastInc] = max(selected, notSelected);
  54. }
  55.  
  56. int main() {
  57.     // your code goes here
  58.     int n;
  59.     cin >> n;
  60.     vector<int> v(n);
  61.     for(int i = 0; i < n; i++){
  62.         cin >> v[i];
  63.     }
  64.     /*
  65.     Recursive Call
  66.     int maxSum = 0;
  67.     getMaximumSum(0, 0, -1, maxSum, v);
  68.     cout << maxSum << '\n';
  69.     */
  70.    
  71.     /*
  72.     Memo Call
  73.         vector<vector<int> > memo(n, vector<int>(n, -1));
  74.         cout << getMaximumSumMemo(0, -1, v, memo) << '\n';
  75.     */
  76.    
  77.     /*
  78.     Memo Call Optimised
  79.    
  80.     */
  81.    
  82.     vector<vector<int> > memo(n, vector<int>(2, -1));
  83.     cout << getMaximumSumMemoOptimisedSpace(0, 0, v, memo);
  84.  
  85. }
  86.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement