In a daily share trading, a buyer buys shares in the morning and sells it on same day. If the trader is allowed to make at most 2 transactions in a day, where as second transaction can only start after first one is complete (Sell->buy->sell->buy). Given stock prices throughout day, find out maximum profit that a share trader could have made.
Code
#include <stdio.h>
#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;
const int N = 110;
int n;
int a[N];
int dp[N];
int main() {
scanf("%d",&n);
for (int i = 0;i < n;i ++) {
scanf("%d",&a[i]);
}
memset(dp,0,sizeof(dp));
int max_val = a[n - 1];
for (int i = n - 2;i >= 0;i --) {
dp[i] = max(dp[i + 1],max_val - a[i]);
max_val = max(max_val,a[i]);
}
int min_val = a[0];
for (int i = 1;i < n;i ++) {
dp[i] = max(dp[i - 1],a[i] - min_val + dp[i]);
min_val = min(min_val,a[i]);
}
cout << dp[n - 1] << endl;
}
没有评论:
发表评论