/*
本题的dp采用一个二维数组,dp[i][0]表示0到i范围内子数组的最小乘积,dp[i][1]表示0到i范围内子数组的最大乘积
*/
#include<iostream>
using namespace std;
int max(int a,int b,int c){
int t;
if(a<b){
t=a;
a=b;
b=t;
}
if(a<c){
t=a;
a=c;
c=t;
}
return a;
}
int min(int a,int b,int c){
int t;
if(a>b){
t=a;
a=b;
b=t;
}
if(a>c){
t=a;
a=c;
c=t;
}
return a;
}
int main()
{
int i,j;
int a[5]={2,3,-2,4,2};
int dp[5][5];
dp[0][0]=a[0];
dp[0][1]=a[0];
for(i=1;i<5;i++){
dp[i][0]=min(dp[i-1][0]*a[i],dp[i-1][1]*a[i],a[i]);
dp[i][1]=max(dp[i-1][0]*a[i],dp[i-1][1]*a[i],a[i]);
}
int max=-999;
for(i=0;i<5;i++){
if(dp[i][1]>max)
max=dp[i][1];
}
cout<<max<<endl;
return 0;
}