2 条题解

  • 0
    @ 2023-10-4 9:58:53

    算法:先对数组从小到大排序,用 i = 1, j = n 指针指向首尾元素; 如果 a_i+a_j>wa\_i + a\_j > w ,则将 a_ja\_j单独作为一组,指针j-- ;如果a_i+a_jwa\_i + a\_j \leq w, 则将a_ia\_ia_ja\_j分为一组, 指针 i--, j--。 如此重复直到 “取完” 所有元素。

    • 0
      @ 2023-10-4 8:41:10

      声明:本题洛谷有原题,想C的去C题解。怕你们说题解代码和我一样
      ​ ​本题是一道典型的贪心问题。我们在读入物品的价格之后,对物品的价格进行排序。然后从价格最小的物品开始枚举,从价值最大的物品反向查看能否与这个物品分为一组。为什么要从价格最大的物品开始进行查看,而不是从价格最小的物品开始呢?我们可以举一个例子。如:

      ​10,20,30,40,50
      

      ​ ​我们看这个数组,当 ww=6060 时,在满足每组最多只能包括两件纪念品的要求下,如果从最小的物品开始配对,那么就需要分 44 组,这明显不是最优的。但是,从价格最大的物品开始配对时,仅需要33 组就能满足要求。这便是最优的方案。

      ​ ​最后,我们再扫一遍这个数组,如果有物品没有被分组,那么就只能让这个物品单独一组了。所以说答案 ansans 就等于已经分的组数++没有被分组的物品的数量。

      • 1

      信息

      ID
      227
      时间
      1000ms
      内存
      256MiB
      难度
      3
      标签
      (无)
      递交数
      158
      已通过
      87
      上传者