Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ผลรวมสูงสุดของเซิร์บซีเควลสลับกันใน C++

ปัญหา

ในบทช่วยสอนนี้ เราจะพูดถึงโปรแกรมเพื่อหาผลรวมสูงสุดของเซิร์บซีเควลสลับกัน

สำหรับนี้ เราจะได้รับอาร์เรย์ของจำนวนเต็ม งานของเราคือหาผลรวมสูงสุดของเซิร์บซีเควลสลับกัน คือลำดับที่ลดลงก่อน แล้วเพิ่ม แล้วลด และไปเรื่อยๆ

ตัวอย่างโค้ด

#include<bits/stdc++.h> 
using namespace std; 

//returning maximum sum alternating series 
int maxAlternateSum(int arr[], int n) { 
    if (n == 1) return arr[0]; 
    int dec[n]; 
    memset(dec, 0, sizeof(dec)); 
    int inc[n]; 
    memset(inc, 0, sizeof(inc)); 
    dec[0] = inc[0] = arr[0]; 
    int flag = 0 ; 
    for (int i=1; i arr[i]) { dec[i] = max(dec[i], inc[j]+arr[i]); flag = 1; } 
            else if (arr[j] < arr[i] && flag == 1) inc[i] = max(inc[i], dec[j]+arr[i]); 
        } 
    } 
    int result = INT_MIN; 
    for (int i = 0 ; i < n; i++) { 
        if (result < inc[i]) 
            result = inc[i]; 
        if (result < dec[i]) result = dec[i]; 
    } 
    return result; 
} 

int main() { 
    int arr[]= {8, 2, 3, 5, 7, 9, 10}; 
    int n = sizeof(arr)/sizeof(arr[0]); 
    cout << "Maximum sum = " << maxAlternateSum(arr , n ) << endl; 
    return 0; 
}

เอาต์พุต

Maximum sum = 25