字节笔试 - 寿司最大价格 - 动态规划 - 数组不相邻数之和最大值

寿司 - 数组不相邻数之和最大值

此题来自于朋友在字节的笔试, 同类题目可见leetcode 198题 House Robber.

给你一堆寿司 不能选相邻的盘子 然后要选出价格加起来最高的那些 print价格

举例 [9 1 4 3] 输出13

如果是[9 1 3 2 5] 输出17

从题目知道这题本质是给一组数组,求数组里不相邻元素的最大值和,也就是说,求最优解。

思路

最优解题目使用DP。

第一步是 确定状态

假设有10碟寿司,价格如下

寿司序列 [0] [1] [2] [3] [4] [5] [8] [9]
价格 9 1 4 3 5 6 8 10

不管是哪种组合,都存在算进组合里的最后一碟。

第二步,转移方程

O P T ( 9 ) OPT(9) OPT(9) --> 定义为当选择寿司[9]作为最后一步的最优解。

会出现两种情况:

如果选择寿司[9]作为最后一碟,那么因为题目元素不相邻的性质, 下一步计算不能选择寿司[8]。需要选择寿司[7],那么 O P T ( 9 ) = O P T ( 7 ) + a r r [ 9 ] OPT(9) = OPT(7)+arr[9] OPT(9)=O

你可能感兴趣的:(刷题,动态规划,算法,leetcode,数据结构)