#include <iostream> using namespace std; int main() { int prices[1001]; // 存储价格的数组 int dp[1001][202]; // 动态规划数组 int n, k; // n 表示天数,k 表示最多交易次数 // 输入天数和最多交易次数 cin >> n >> k; // 输入每一天的价格 for(int i = 1; i <= n; i++) { cin >> prices[i]; } dp[1][0] = 0; // 第一天不进行任何交易的利润为0 // 初始化第一天的动态规划数组 for(int i = 1; i <= 100; i++) { dp[1][2 * i - 1] = -prices[1]; // 第一次买入后的状态 dp[1][2 * i] = 0; // 不进行任何交易的状态 } // 从第二天开始进行动态规划 for(int i = 2; i <= n; i++) { dp[i][0] = 0; // 第0次交易的利润为0 // 遍历每一次可能的交易次数 for(int j = 1; j <= k; j++) { // 第j次买入后的最大利润 dp[i][2 * j - 1] = max(dp[i - 1][2 * j - 1], dp[i - 1][2 * j - 2] - prices[i]); // 第j次卖出后的最大利润 dp[i][2 * j] = max(dp[i - 1][2 * j], dp[i - 1][2 * j - 1] + prices[i]); } } // 输出在n天内最多进行k次交易的最大利润 cout << dp[n][2 * k] << endl; return 0; } // 64 位输出请用 printf("%lld")