社区讨论

已严肃被豆包制裁

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 条回复,欢迎继续交流。

正在加载回复...