问题描述
  元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作。为使得参加晚会的同学所获得的纪念品价值 相对均衡,他要把购来的纪念品根据价格进行分组,但每组最多只能包括两件纪念品,并且每组纪念品的价格之和不能超过一个给定的整数。为了保证在尽量短的时 间内发完所有纪念品,乐乐希望分组的数目最少。
  你的任务是写一个程序,找出所有分组方案中分组数最少的一种,输出最少的分组数目。
输入格式
  输入包含n+2行:
  第1行包括一个整数w,为每组纪念品价格之和的上限。
  第2行为一个整数n,表示购来的纪念品的总件数。
  第3~n+2行每行包含一个正整数pi (5 <= pi <= w),表示所对应纪念品的价格。
输出格式
  输出仅一行,包含一个整数,即最少的分组数目。
样例输入
100
9
90
20
20
30
50
60
70
80
90
样例输出
6
数据规模和约定
  50%的数据满足:1 <= n <= 15
  100%的数据满足:1 <= n <= 30000, 80 <= w <= 200

分析:排序+贪心。先从小到大排序,i、j指针分别从左到右、从右到左遍历。
如果a[i]+a[j] <= w,那么把这两个物品都放入同一组,并且同时移动指针;
否则,只能把j所指向的物品放入单独的一个组,移动j指针…直到i j把所有物品都遍历完~

分析下贪心算法的可行性:如果j物品和i物品加起来超过了w,因为j物品比j+1处的物品价值小,那么如果i不能满足加起来的条件,而i-1能满足该条件,是否会影响贪心算法的结果呢?
如果让j和i-1去组合,对于j+1,因为价值比j更大,所以就更放不进i了,所以即使交换组合方式还是不影响构成的组数的~

至于为什么循环的条件是i <= j,当i<j的时候,假设i j已经相邻,那么此时还能再比较一次i+j能否满足构成一组的条件,如果满足就会把它们放到一组,之后i j指针同时移动后i>j不能够满足进入循环的条件了;如果不满足把它们放入一组,那么j放入一组后j移动指针,使i == j,继续进入循环;

当i == j的时候,因为这个单独的物品已经没有可以组合的物品剩余了,所以此时还要进入循环进行一次 cnt++ 的计数操作~//这就是while(i <= j)的解释~

#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
int main() {int w, n;scanf("%d %d", &w, &n);int *a = new int[n];for(int i = 0; i < n; i++)scanf("%d", &a[i]);sort(a, a+n);int i = 0, j = n-1, cnt = 0;while(i <= j) {if(a[i] + a[j] <= w) {i++;}cnt++;j--;}cout << cnt;return 0;
}

蓝桥杯 ALGO-34算法训练 纪念品分组(贪心算法+排序)相关推荐

  1. java 蓝桥杯算法训练 纪念品分组(题解)

    试题 算法训练 纪念品分组 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作.为使得参加晚会的同学所获得的纪念品价值 相对均衡, ...

  2. 算法训练 纪念品分组(java)

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

  3. 蓝桥杯知识点汇总:基础知识和常用算法

    文章目录 JAVA基础语法: 算法竞赛常用的JAVA API: 算法和数据结构 简单算法 简单数据结构 图论 数学 贪心 动态规划 补充 省赛题解 待更: 此系列包含蓝桥杯(软件类)所考察的绝大部分知 ...

  4. 第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-2 算法训练 最大最小公倍数

    第十四届蓝桥杯集训--练习解题阶段(无序阶段)-ALGO-2 算法训练 最大最小公倍数 目录 第十四届蓝桥杯集训--练习解题阶段(无序阶段)-ALGO-2 算法训练 最大最小公倍数 前言 算法训练 最 ...

  5. 第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-42 算法训练 送分啦

    第十四届蓝桥杯集训--练习解题阶段(无序阶段)-ALGO-42 算法训练 送分啦 目录 第十四届蓝桥杯集训--练习解题阶段(无序阶段)-ALGO-42 算法训练 送分啦 前言 算法训练 送分啦 C语言 ...

  6. 蓝桥杯python省赛冲刺篇2——常用算法的详细解析及对应蓝桥杯真题:打表模拟法、递推递归法、枚举法、贪心算法、差分与前缀和

    注意:加了题目链接 目录 注意:加了题目链接 一.打表模拟法 介绍 1. 算式问题 题目描述 解析与代码演示 2. 求值 题目描述 解析与代码演示 3. 既约分数 题目描述 解析与代码演示 4. 天干 ...

  7. 蓝桥杯国赛五一训练赛(1)

    蓝桥杯国赛五一训练赛(1)(链接) 问题 A: 费解的开关 你玩过"拉灯"游戏吗?25盏灯排成一个5x5的方形.每一个灯都有一个开关,游戏者可以改变它的状态.每一步,游戏者可以改变 ...

  8. 蓝桥杯练习系统-入门训练java版

    蓝桥杯练习系统-入门训练:http://lx.lanqiao.cn/problemset.page?code=BEGIN-&userid=301077 package 蓝桥杯系统入门训练;im ...

  9. 算法训练一(贪心、二分)(含解题思路)(上)

    目录 7-1最少失约(贪心) AC代码: 7-2删数问题(贪心) 7-3区间覆盖(贪心) AC代码: 7-7加油站之最小加油次数(贪心+优先队列) AC代码: 7-8求解删数问题(贪心) AC代码: ...

最新文章

  1. 基于FPGA的以太网开发
  2. CSS导航条菜单:带小三角形
  3. tomcat启动报:No Spring WebApplicationInitializer types detected on classpath
  4. php3源码分析,ThinkPHP3.1.3源码分析(一) 入口文件分析
  5. 黑马程序员_面向对象的三大特征
  6. Spark SQL运行架构
  7. gitlab私服搭建
  8. 如何在苹果Mac中设置 Excel 文件打印范围刚好是一页纸?
  9. mybatis foreach标签的使用
  10. 【HAL库系列】1.STM32CubeIDE下载与配置
  11. vmware虚拟机连接网络
  12. postSQL hash分表
  13. 新一代Pascal.Net编程语言---PascalABC.Net开发平台
  14. 笔记本更改计算机开机时用户名和密码错误,怎样修改联想电脑开机账号密码怎么办...
  15. centos7无法上网问题
  16. A. Captain Flint and Crew Recruitment
  17. 【改变键盘上方向键蹩脚的位置】通过autohotkey脚本实现键盘按键重映射【便利码代码】--以上下左右键映射为capslock与hjkl组合的按键 【附源码】
  18. 2021最新的高通骁龙处理器排名
  19. 仿苹果手机_高价回收旧手机旧电脑最终怎么处理了?能不能卖?
  20. git补丁操作:git生成patch和应用patch

热门文章

  1. Android编程之仿微信显示更多文字的View
  2. Delphi XE 10.1 Can't bind address: Address already in use. Exiting.
  3. 话说模式匹配(1) 什么是模式?
  4. Qt5设置应用程序图标及程序的发布
  5. 怎样管理Lotus Domino
  6. 速度更新!GoCD又曝仨洞,极易遭利用且结合利用可成供应链攻击的新跳板
  7. SonicWall 紧急提醒:EOL 设备正遭勒索攻击!
  8. Citrix SD-WAN 被曝远程代码执行漏洞
  9. 这个 DNS 新漏洞可导致大规模的 DDoS 攻击活动
  10. VMware 修复 Fusion 和 Horizon 中的两个提权漏洞