3.31 恒生电子第2题,买卖股票的问题
考试的时候没有 a 出来
考完之后又做的,自己验证过了几个例子,不知道写的有没有问题。
public class Main {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* <p>
* 根据输入计算最大收益
*
* @param M double浮点型 初始资金
* @param N int整型 历史价格天数
* @param historyPrices double浮点型一维数组 N天历史价格
* @param K int整型 最大允许交易次数
* @return double浮点型
*/
public static double get_max_profit(double M, int N, double[] historyPrices, int K) {
// [天数][交易次数][是否持有股票]
// dp[i][j][0] 表示:前 i 天,第 j 次交易(卖出)的价钱 <!-- 0 表示 卖出 -->
// dp[i][j][1] 表示,前 i 天,第 j 次交易(买入)的股数 <!-- 1 表示 买入 -->
double[][][] dp = new double[N][K + 1][2];
// 初始化
for (int i = 0; i <= K; i++) {
dp[0][i][1] = M / historyPrices[0];
dp[0][i][0] = M;
}
for (int i = 1; i < N; i++) {
for (int j = 1; j <= K; j++) {
dp[i][j][0] = Math.max(dp[i - 1][j][0], dp[i - 1][j][1] * historyPrices[i]);
dp[i][j][1] = Math.max(dp[i - 1][j][1], dp[i - 1][j - 1][0] / historyPrices[i]);
}
}
return dp[N - 1][K][0] - M;
}
}
#2024暑期实习#