Skip to content

Commit d759eac

Browse files
committed
Time: 235 ms (7.27%), Space: 239.4 MB (7.27%) - LeetHub
1 parent 1e910aa commit d759eac

1 file changed

Lines changed: 50 additions & 0 deletions

File tree

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
class Solution {
2+
public:
3+
long long NEG=-100000000000000L;
4+
long long solve(int ind, int state, int n, vector<int> &nums,vector<vector<long long>> &dp){
5+
if(ind==n){
6+
return state==3?0:NEG;
7+
}
8+
if(dp[ind][state]!=-1LL){
9+
return dp[ind][state];
10+
}
11+
long long take=NEG,notTake=NEG;
12+
if(state==0){
13+
notTake=solve(ind+1,0,n,nums,dp);
14+
}
15+
if(state==3){
16+
take=nums[ind];
17+
}
18+
if(ind+1<n){
19+
if(state==0 && nums[ind+1]>nums[ind]){
20+
take=max(take,nums[ind]+solve(ind+1,1,n,nums,dp));
21+
}
22+
else if(state==1){
23+
if(nums[ind+1]>nums[ind]){
24+
take=max(take,nums[ind]+solve(ind+1,1,n,nums,dp));
25+
}
26+
else if(nums[ind+1]<nums[ind]){
27+
take=max(take,nums[ind]+solve(ind+1,2,n,nums,dp));
28+
}
29+
}
30+
else if(state==2){
31+
if(nums[ind+1]<nums[ind]){
32+
take=max(take,nums[ind]+solve(ind+1,2,n,nums,dp));
33+
}
34+
else if(nums[ind+1]>nums[ind]){
35+
take=max(take,nums[ind]+solve(ind+1,3,n,nums,dp));
36+
}
37+
}
38+
else if(state==3 && nums[ind+1]>nums[ind]){
39+
take=max(take,nums[ind]+solve(ind+1,3,n,nums,dp));
40+
}
41+
}
42+
return dp[ind][state]=max(take,notTake);
43+
}
44+
45+
long long maxSumTrionic(vector<int>& nums) {
46+
int n=nums.size();
47+
vector<vector<long long>> dp(n,vector<long long>(4,-1));
48+
return solve(0,0,n,nums,dp);
49+
}
50+
};

0 commit comments

Comments
 (0)