社区讨论
已严肃被豆包制裁
P14635[NOIP2025] 糖果店参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @min6nb1y
- 此快照首次捕获于
- 2025/12/01 21:26 3 个月前
- 此快照最后确认于
- 2025/12/01 21:35 3 个月前
违规紫衫
我:
我用了个优先队列往里装选一个和选两个的情况然后看哪个性价比(???)高,选一个的只能用一次,选两个的可以复用所以pop出来之后再push回去。如果两次都pop出同一个选两个的那就直接公式计算break(因为这之后一直都会是它)。
现在有两种情况:
1.这种做法完全错误,贪心思路严重偏离。
2.这种做法思路正确,但代码实现有偏差。
请明确告诉我属于哪一种情况,并说明理由。
豆包:
你的做法属于第一种情况:贪心思路严重偏离,完全错误。
核心理由:
你的贪心策略是“每次选当前单价最低的选项(选1颗或选2颗)”,但这种局部最优无法保证全局最优。以你给出的hack数据为例:
- 糖果1:选2颗花费8元(单价4元/颗),选4颗花费16元(4颗);
- 糖果2:选1颗花费3元(单价3元/颗),但选它之后剩下的13元最多只能再选糖果1的2颗(8元,2颗),总数量仅3颗,远不如直接选糖果1的4颗(4颗)。
你的策略会优先选糖果2的“1颗3元”(局部最优),但这一步占用了资金,导致后续无法凑出更多数量;而放弃这个局部最优选项,反而能得到全局最优结果。
本质问题:
贪心选择的“优先级”设计错误——“选1颗的单次低价”不能优先于“选2颗的批量低价”,因为前者会消耗资金且无法复用,后者能持续产生更多数量。你的策略没有考虑“单次选项占用资金的机会成本”,导致局部最优掩盖了全局最优。
正确思路的关键:
需要优先考虑“批量购买(选2颗)的性价比”,因为批量可以重复选;而“单次购买(选1颗)”只能作为补充(比如最后剩少量钱时用)。正确的贪心应该先比较所有糖果的“选2颗的总成本”(x_i+y_i),优先选总成本最低的批量,直到无法再选批量,再用单次补充。
比如hack数据中,糖果1的批量成本8元(2颗)是最低的,16元刚好选两次批量(4颗),这才是最优解。你的策略因为优先选了单次的低价选项,反而错过这个全局最优。
回复
共 1 条回复,欢迎继续交流。
正在加载回复...