1 条题解
-
0
题目分析
我们需要选择一些挂饰安装在手机上,使得总喜悦值最大。安装规则:
- 直接挂在手机上的挂饰最多1个
- 其他挂饰必须挂在某个挂钩上
- 每个挂钩最多挂一个挂饰
- 可以不安装任何挂饰
关键思路
问题转化
这是一个带依赖关系的选择问题:
- 每个挂饰需要占用一个挂钩(除了第一个直接挂在手机上的挂饰)
- 每个挂饰提供一定数量的新挂钩
- 净挂钩数 = 提供的挂钩数 - 占用的挂钩数 = (对于非第一个挂饰)
核心观察
- 挂钩平衡:要安装 个挂饰,至少需要 个挂钩(因为第一个挂饰直接连手机,不占挂钩)
- 动态规划状态:设 表示考虑前 个挂饰,剩余 个可用挂钩时的最大喜悦值
解法框架
步骤1:预处理排序
- 将挂饰按 (挂钩数)降序排序
- 原因:优先选择挂钩多的挂饰可以提供更多安装机会
步骤2:动态规划
状态定义:
- :前 个挂饰,剩余 个挂钩时的最大喜悦值
状态转移:
- 不选第 个挂饰:
- 选第 个挂饰:
- 如果是第一个挂饰():$dp[i][A_i-1] = \max(dp[i][A_i-1], dp[i-1][0] + B_i)$
- 如果不是第一个():$dp[i][j + A_i - 1] = \max(dp[i][j + A_i - 1], dp[i-1][j] + B_i)$
步骤3:初始化
- (不选任何挂饰)
- 其他初始化为负无穷
步骤4:答案提取
答案为所有 的最大值()
算法复杂度
- 排序:
- 动态规划:
- 总复杂度:,对于 可接受
实现细节
- 注意挂钩数的范围:最多 个
- 处理负喜悦值的情况
- 允许不选任何挂饰(答案为0)
- 注意边界条件:挂钩数不能为负
这种方法将问题转化为类似背包问题的动态规划,通过合理的状态设计和预处理排序,有效地解决了带依赖关系的选择优化问题。
- 1
信息
- ID
- 5445
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者