考虑到正负号的问题,显然一个动态规划的表不够,于是用两个表来进行dp

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<vector>
 4 using namespace std;
 5 int main(void)
 6 {
 7     int n = 0;
 8     while (cin >> n)
 9     {
10         vector<int> seq;
11         int i=0;
12         int num;
13         while (i <= n-1 )
14         {
15             cin >> num;
16             seq.push_back(num);
17             ++i;
18         }
19         int size = seq.size();
20         if (size == 0)
21             return 0;
22         vector<int> dp(size + 1, 0);
23         vector<int> max_(size + 1, 0);
24         vector<int> min_(size + 1, 0);
25         int j = 0;
26         dp[0] = seq[0];
27         max_[0] = seq[0];
28         min_[0] = seq[0];
29         int result = 0;
30 
31         for (i = 1; i <= size - 1; ++i)
32         {
33             max_[i] = max(seq[i], max(max_[i - 1] * seq[i], min_[i - 1] * seq[i]));
34             min_[i] = min(seq[i], min(max_[i - 1] * seq[i], min_[i - 1] * seq[i]));
35             if (max_[i] > result)
36                 result = max_[i];
37         }
38 
39         cout << result << endl;
40     }
41     return 0;
42 }

 

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄