蓝桥杯 纪念品分组(贪心,排序)

左手的ㄟ右手 2022-11-05 13:58 281阅读 0赞

上一篇博客:朴素Dijkstra算法

 写在前面:大家好!我是AC-fun,我的昵称来自两个单词Acceptedfun。我是一个热爱ACM的蒟蒻。如果博客中有不足或者的错误的地方欢迎在评论区或者私信我指正,感谢大家的不吝赐教。我的唯一博客更新地址是:https://ac-fun.blog.csdn.net/。非常感谢大家的支持。一起加油,冲鸭!
用知识改变命运,用知识成就未来!加油 (ง •̀o•́)ง (ง •̀o•́)ง

原题链接:纪念品分组

文章目录

  • 题目信息
    • 题目描述
    • 输入描述
    • 输出描述
    • 输入样例
    • 输出样例
  • 题解
    • 解题思路
    • 解题代码

题目信息

题目描述

 元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作。为使得参加晚会的同学所获得的纪念品价值相对均衡,他要把购来的纪念品根据价格进行分组,但每组最多只能包括两件纪念品,并且每组纪念品的价格之和不能超过一个给定的整数。为了保证在尽量短的时间内发完所有纪念品,乐乐希望分组的数目最少。

 你的任务是写一个程序,找出所有分组方案中分组数最少的一种,输出最少的分组数目。

输入描述

 第 1 行包括一个整数 w (80 ≤ w ≤ 200),为每组纪念品价格之和的上限。

 第 2 行为一个整数 n (1 ≤ n ≤ 30000),表示购来的纪念品的总件数。

 第 3 ~ n+2 行每行包含一个正整数 pi (5 ≤ pi ≤ w),表示所对应纪念品的价格。

输出描述

 输出一行,包含一个整数,即最少的分组数目。

输入样例

100
9
90
20
20
30
50
60
70
80
90

输出样例

6

题解

解题思路

 本题是一个贪心问题,分组要求是每组最多只能包括两件纪念品,并且每组纪念品的价格之和不能超过一个给定的整数 w。可以先将所有输入的纪念品的价格从小到大排序,然后使用 双指针算法 每次从后取一个还未取到的价格最大的纪念品,从前取一个还未取到的价格最小的纪念品,判断这两个纪念品的价格之和是否大于 w,如果大于 w,说明此时价格最大的纪念品只能自己一组,然后使指向价格最大的纪念品的指针向前移动一位。否则说明这两个纪念品可以成为一组,此时让指向价格最小的纪念品的指针同时也向后移动一位。然后继续判断下一组纪念品。

 每次确定好一组纪念品之后都使记录最少分组数目的计数器加一。直到这两个指针相遇,结束遍历。最后输出结果即可。

解题代码

  1. #include <iostream>
  2. #include<algorithm>
  3. using namespace std;
  4. const int N = 30010;
  5. int w, n;
  6. int ans;
  7. int q[N];
  8. int main()
  9. {
  10. cin >> w >> n;
  11. for (int i = 0; i < n; i++) scanf("%d", &q[i]);
  12. sort(q, q + n);
  13. int j = 0;
  14. for (int i = n - 1; i >= j; i--) {
  15. if (q[i] + q[j] <= w) {
  16. ans++;
  17. j++;
  18. } else ans++;
  19. }
  20. cout << ans;
  21. return 0;
  22. }

未完待续,持续更新中……
20210306223515499.png

发表评论

表情:
评论列表 (有 0 条评论,281人围观)

还没有评论,来说两句吧...

相关阅读

    相关 -筑基篇】贪心

    假如整数n表示当前奖池中已经有的钱的总数,给你一个一夜暴富的机会:请你从n中删除m个数字,余下的数值对应的金额就是你能够拿走的钱,我们知道人性都是贪婪的,那么请编程帮小明...

    相关 贪心算法-

    一、贪心算法的优缺点 优点: 1.容易理解:生活常见。 2.操作简单:在每一步都选局部最优。 3.效率高: 复杂度常常是O(1)的。 缺点: 1.局

    相关 排序-

    一、排序算法 基于比较的低效算法: 选择排序、插入排序、冒泡排序。时间复杂度O(n2)。 基于比较的高效算法: 归并排序、快速排序、堆排序。时间复杂度O

    相关 - 学生排序

    这个题就是单纯的结构体排序问题,有一个小问题就是,冒泡排序是稳定排序,是不会打乱相同大小数字的顺序的,快速排序会打乱顺序。 注意使用冒泡排序。 include<i

    相关 NOIP 2007 纪念品分组(贪心)

    题目描述 元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作。为使得参加晚会的同学所获得 的纪念品价值相对均衡,他要把购来的纪念品根据价格进行分组,但每组最多只能包括两件

    相关 贪心算法4:纪念品分组

    > 几个贪心的例子: 1. 最优装载问题: 给n个物体,第i个物体重量为wi,选择尽量多的物体,使得总重量不超过C。 贪心策略:将物体的重量从小到大排序,每次选择最轻的物