-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathBest time to buy and sell stock 3
34 lines (32 loc) · 1.22 KB
/
Best time to buy and sell stock 3
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
#include <bits/stdc++.h>
// int f(int i, int buy, int cap, int n, vector<int> &prices, vector<vector<vector<int>>> &dp){
// if(cap == 0) return 0;
// if(i == n) return 0;
// if(dp[i][buy][cap] != -1) return dp[i][buy][cap];
// if(buy){
// return dp[i][buy][cap] = max(-prices[i] + f(i+1, 0, cap, n, prices, dp), 0 + f(i+1, 1, cap, n, prices, dp));
// }
// else{
// return dp[i][buy][cap] = max(prices[i] + f(i+1, 1, cap-1, n, prices, dp), 0 + f(i+1, 0, cap, n, prices, dp));
// }
// }
int maxProfit(vector<int>& prices, int n)
{
// vector<vector<vector<int>>> dp(n, vector<vector<int>>(2, vector<int>(3, -1)));
// return f(0, 1, 2, n, prices, dp);
// Write your code here.
vector<vector<vector<int>>> dp(n+1, vector<vector<int>>(2, vector<int>(3, 0)));
for(int i=n-1;i>=0;i--){
for(int buy=0;buy<=1;buy++){
for(int cap=1;cap<=2;cap++){
if(buy){
dp[i][buy][cap] = max(-prices[i] + dp[i+1][0][cap], 0 + dp[i+1][1][cap]);
}
else{
dp[i][buy][cap] = max(prices[i] + dp[i+1][1][cap-1], 0 + dp[i+1][0][cap]);
}
}
}
}
return dp[0][1][2];
}