动态规划(C++)

这个时leecode的思路,可以看看。

alt

#include<iostream>
#include<vector>

#define INT_MAX 0x7fffffff
#define INT_MIN 0x80000000
using namespace std;

int maxMuti(vector<int> &arr,int nums){
    
    int GMax = arr[0];
    int GMin = arr[0];
    int max_n = INT_MIN;
    //(1)
    for(int i = 1;i < nums; i++){
        int mx = GMax, mn = GMin;
        GMax = max(mx * arr[i] , max(mn*arr[i] , arr[i]));
        GMin = min(mn * arr[i] , min(mx*arr[i] , arr[i]));
        max_n = max(GMax , max_n);
        //cout << GMax <<endl;
    }
    return max_n;
}

int main(){
    int nums;
    cin >> nums;
    vector<int> arr(nums);
    
    for(int i = 0;i < nums; i++){
        cin >> arr[i];
    }
    //(2)
    //这里是为了处理只有一个输入的情况。。。因为在(1)中遍历时会从第二个开始遍历,
    //所以边界问题得解决。
    cout << max(maxMuti(arr,nums),arr[0]) << endl;
    return 0;
}