思路: 这是一个典型的动态规划问题。 我们可以用一个二维数组dp来记录小青在每一轮中所能获得的最大财富。 dp[i][j]表示小青在第i轮取出第j个珠宝时所能获得的最大财富。 对于第i轮取出的珠宝x,有两种情况: 1. 如果取出的是最上面的珠宝,即dp[i][j] = dp[i-1][j] + stones[j] * c[i]。 2. 如果取出的是最下面的珠宝,即dp[i][j] = dp[i-1][j-1] + stones[j] * c[i]。 小青在第i轮中的最大财富就是这两种情况中的较大值。 为了使得边界情况也能适用于上述状态方程,我们可以在stones和c的前面分别插入一个0,即stones = [0] + stones,c = [0] + c。 算法流程: 1. 初始化二维数组dp,大小为(m+1)×(n+1),并将其所有元素初始化为0。 2. 将stones和c的前面插入一个0。 3. 对于i从1到m, j从1到n,进行如下操作: - 如果j == 1,即取出的是最上面的珠宝,则dp[i][j] = dp[i-1][j] + stones[j] * c[i]。 - 如果j == n,即取出的是最下面的珠宝,则dp[i][j] = dp[i-1][j-1] + stones[j] * c[i]。 - 否则,dp[i][j] = max(dp[i-1][j] + stones[j] * c[i], dp[i-1][j-1] + stones[j] * c[i])。 4. 返回dp[m][n],即最高财富。 时间复杂度分析: 由于需要遍历m×n个状态,因此时间复杂度为O(mn)。 [2024-12-07 11:39:39 | AI写代码神器 | 695点数解答]