-
Notifications
You must be signed in to change notification settings - Fork 0
/
123.cpp
81 lines (78 loc) · 2.03 KB
/
123.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <iostream>
#include <vector>
#include <map>
using namespace std;
class Solution {
public:
int maxProfit(vector<int>& prices) {
int len=prices.size();
vector<pair<int,int> >temp;
int i=0;
int j=0;
int res=0;
while(i<len)
{
if(i+1<len&&prices[i+1]>prices[i])
{
j=i+1;
while(j+1<len&&prices[j+1]>prices[j])
j++;
temp.push_back(pair<int,int>(prices[i],prices[j]));
i=j+1;
}
else
i++;
}
/*vector<pair<int,int> >::iterator ite=temp.begin();
while(ite!=temp.end())
{
cout<<ite->first<<" "<<ite->second<<endl;
ite++;
}*/
len=temp.size();
int num[len][len];
for(int i=0;i<len;i++)
{
num[i][i]=temp[i].second-temp[i].first;
if(num[i][i]>res)
res=num[i][i];
}
for(int i=1;i<len;i++)
{
for(int j=0;j+i<len;j++)
{
num[j][j+i]=num[j][j+i-1];
for(int k=j;k<j+i;k++)
{
// cout<<num[j][k]<<" "<<num[k+1][i+j]<<endl;
if(res<num[j][k]+num[k+1][i+j])
{
res=num[j][k]+num[k+1][i+j];
// cout<<res<<endl;
}
if(temp[j+i].second-temp[k].first>num[j][j+i])
num[j][j+i]=temp[j+i].second-temp[k].first;
}
if(num[j][j+i]>res)
res=num[j][j+i];
}
}
return res;
}
};
int main()
{
vector<int> prices;
prices.push_back(1);
prices.push_back(2);
prices.push_back(9);
prices.push_back(2);
prices.push_back(4);
prices.push_back(6);
prices.push_back(1);
prices.push_back(8);
prices.push_back(1);
Solution s;
cout<<s.maxProfit(prices)<<endl;
return 0;
}