You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Codeforces Gym J题贪心解法调试求助:7数不等式验证问题

问题根源分析:贪心解法无法通过测试用例的核心原因

1. 完全误解题目核心条件

题目要求的是原数组的下标满足 i₁ ≥ i₂ ≥ i₃ ≥ i₄ ≥ i₅ ≥ i₆ ≥ i₇,而非元素值的非递增。你的代码一开始就对数组进行降序排序,彻底破坏了原数组的下标顺序,导致选出的元素对应的原数组下标大概率不满足非递增要求,同时也会错过原数组中符合下标条件的有效组合。

比如测试用例 [3,3,1,1,1,1,1]:

  • 原数组中存在有效组合:下标6≥5≥4≥3≥2≥1≥0,对应元素值1,1,1,1,1,3,3,满足 1 < 1+1 且 1+1 <1+1+3+3,总sum为11。
  • 你的代码排序后数组为[3,3,1,1,1,1,1],遍历后会返回-1,完全错过该有效组合。

2. sum_x4_x7的选择逻辑错误

即使忽略下标条件的误解,你的代码在选择x4-x7时,固定取x3后面连续的四个元素,而非排除x1,x2,x3后的最大四个元素。在降序数组中,若x2,x3选择了靠后的小元素,前面未被选中的大元素才是x4-x7的最优选择,你的代码会错过这种情况,导致无法满足sum_x2_x3 < sum_x4_x7的条件,或者得到的总sum不是最大值。

3. 循环内的数值更新错误

在x3的循环中,你递增x3后没有重新计算sum_x2_x3,而是沿用之前的数值,导致后续的sum_x2_x3 >= nums[x1]判断完全失效,会错误地跳过或进入不符合条件的分支。

修正思路

  1. 回归题目下标要求:必须基于原数组的下标非递增规则选择元素,即所选元素在原数组中的位置是从右往左(或相同位置,需保证下标唯一)的顺序。
  2. 预处理后缀最大和数组:为了高效计算某位置左侧的最大元素组合,预处理三个后缀数组:
    • max1[i]:从下标0到i的最大元素值;
    • max2[i]:从下标0到i的最大两个元素的和;
    • max4[i]:从下标0到i的最大四个元素的和。
  3. 遍历所有可能的i3位置:对于每个i3(作为第三个元素的下标),在i3到N-1的范围内找满足x[i1] < x[i2]+x[i3]的最大x[i1]+x[i2]+x[i3],同时在0到i3-1的范围内找最大的四个元素和,判断是否满足x[i2]+x[i3] < max4[i3-1],记录所有符合条件的组合的最大总sum。
  4. 控制时间复杂度:通过预处理数组将每次查询的时间降到O(1),整体时间复杂度保持在O(N),适配N≤5e5的规模。

内容的提问来源于stack exchange,提问作者Shukie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 19:57:04