#include <iostream> // 包含输入输出流库 #include<algorithm> // 包含算法库(如 max 函数) using namespace std; int main() { int dp[100005][5] = {0}; // 定义一个动态规划数组 dp,并初始化为 0 int n, price[100005]; // 定义变量 n 和价格数组 price cin >> n; // 输入天数 n for(int i = 1; i <= n; i++) { cin >> price[i]; // 输入每一天的价格 } // 初始化第 1 天的状态 dp[1][1] = -price[1]; // 第 1 天买入股票的状态,花费为 -price[1] dp[1][3] = -price[1]; // 第 1 天进行第二次买入的状态,也为 -price[1] // 从第 2 天开始迭代计算 for(int i = 2; i <= n; i++) { dp[i][0] = dp[i-1][0]; // 第 i 天没有操作,状态与前一天相同 dp[i][1] = max(dp[i-1][1], dp[i-1][0] - price[i]); // 第 i 天第一次买入,或保持不变 dp[i][2] = max(dp[i-1][2], dp[i-1][1] + price[i]); // 第 i 天第一次卖出,或保持不变 dp[i][3] = max(dp[i-1][3], dp[i-1][2] - price[i]); // 第 i 天第二次买入,或保持不变 dp[i][4] = max(dp[i-1][4], dp[i-1][3] + price[i]); // 第 i 天第二次卖出,或保持不变 } // 输出最大利润(比较 dp[n][4] 和 dp[n][0],即卖出两次后的最大值与不操作的最大值) cout << max(dp[n][4], dp[n][0]) << endl; }