1 条题解
-
0
题目大意
给定 张卡牌,每张卡牌有一个数字 ()。游戏规则如下:
依次抽牌,可以选择将牌加入手牌或丢弃
可以随时计算手牌分数:如果手中有 张相同的牌,获得 分,然后清空手牌
手牌中的牌必须数字完全相同
求通过最佳策略能获得的最高分数。
关键观察
相同数字的牌必须一起计算:由于手牌中的牌必须数字相同,相同数字的牌应该放在一起考虑。
动态规划状态设计:设 表示处理完前 张牌能获得的最大分数。
转移方程:对于第 张牌,有两种选择:
不选这张牌:
选这张牌,并与前面相同数字的若干张牌一起计算分数
斜率优化:对于每个数字,维护一个决策队列,使用单调队列优化转移。
算法细节
状态转移 对于数字 ,假设当前处理到第 张牌,它是数字 的第 次出现。考虑从数字 的第 次出现的位置转移过来:
f[i]=max(f[i],f[p−1]+(j−p+1) ^k/2) 斜率优化 对于每个数字维护一个决策队列,队列中的决策满足斜率单调性。使用二分查找来维护队列的决策优势。
分数计算 根据 的值不同:
:分数为
:分数为
:分数为
复杂度分析
时间复杂度:,每个数字最多入队出队一次,每次二分查找
空间复杂度:
- 1
信息
- ID
- 4495
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 26
- 已通过
- 1
- 上传者