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暑期实习#