读入之后先用sort排序,然后用两个指针一起向中间走,每次选择都尽可能的让当前状态下最大的和最小的分在一组,如果不行就最大的单独分一组,这样贪心下来就是最少分的组了。证明如下:

如果最大的a[r]不与最小的a[l]分在一组,而是a[r]与a[i]在一组,a[l]与a[j]在一组,因为a[l]<=a[i]&&a[r]>=a[j],所以交换两者分组不影响后续选择,而a[r]如果不能与a[l]在一组,因为a[l]为当前最小值,所以a[r]只能单独为一组,所以贪心是 正确的。

题目描述

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

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

输入

输入文件group.in包含n+2行:

第1行包括一个整数w,为每组纪念品价格之和的上眼= 第2行为一个整数n,表示购来的纪念品的总件数G

第3-n+2行每行包含一个正整数Pi (5 <= Pi <= w3)w表示所对应纪念品的价格。

输出

输出文件group.out仅→行,包含一个整数, ep最少的分组数目合

样例输入

100
9
90
20
20
30
50
60
70
80
90 

样例输出

6

提示

50%的数据满足: 1 <=n <= 15

100%的数据满足: 1 <= n <= 30000, 80 <= W <= 200

解题代码:

#include<bits/stdc++.h>
using namespace std;
int ps[30001];
int main(){int w,n,ans=0;cin>>w>>n;for(int i=0;i<n;i++)cin>>ps[i];sort(ps,ps+n);int l=0,r=n-1;while(l<=r){if(ps[l] + ps[r] <=w )l++,r--,ans++;elser--,ans++;}cout<<ans<<endl;return 0;
}

贪心算法——洛谷(P1094)纪念品分组相关推荐

  1. 贪心算法——洛谷(P1478)陶陶摘苹果

    我们看一下,在这个题里,所有苹果费力气也就是占背包空间不同,但是价值都是1.背包问题主要是为了解决拿得多却不一定价值最大,拿价值大的却可能装不下其他有价值的东西而使人陷入两难才被发明的算法.对于价值相 ...

  2. 贪心算法——洛谷(P1090)[NOIP2004]合并果子

    该题目也属于经典的贪心算法,在这里熟悉C++里优先队列的使用. 需要导入头文件:   #include<queue> 从这个问题可以深挖出神奇的哈夫曼树问题. 因为这题里合并的是二叉树,所 ...

  3. 贪心算法——洛谷(P4995)跳跳!

    很简单的一道题,就是排序之后贪心+模拟: 先将台阶的高度从小到大排序,注意0也算,但是不是输入进去的: 每次从距离 最小和最大值之间跳跃, 从最小跳到最大之后,最大值不变,最小的下标+1,从最大跳到最 ...

  4. 贪心算法——洛谷(P1803)

    这道题目官方说的是 线段覆盖 的问题,我觉得还是和区间调度一样 采取结构体存放比赛开始和结束时间,用sort排序,自定义cmp, 将结束时间从小到大排序,然后依次选择符合的,即为最终答案 此题为典型的 ...

  5. 贪心算法——洛谷(P1106)删数问题

    首先,我们先举一个例子: 1 7 5 4 3 8 删的个数:4 不难看出: 第一次删的应该是 7 第二次删的应该是 5 第三次删的应该是 4 第四次删的应该是 8 那么,剩下的数就是"13& ...

  6. 贪心算法——洛谷(P3817)小A的糖果

    这道题很简单,但是需要思考 当相邻的两盒大于x到时候,应该先吃那一盒呢? 答案:正着遍历,吃后面:反着遍历,吃前面! 为什么是这样的呢? 比如一个样例: 5 6 4 5 3 6 2 此时,若正着遍历, ...

  7. 贪心の纪念品分组(洛谷P1094题题解,Java语言描述)

    题目要求 P1094题目链接 分析 经典的贪心思想,为什么是贪心呢?请看这位大佬的博客讲解,他讲的真的很好,orz. 我讲一下怎么用贪心吧. 其实贪心一般与排序相关,因为总要获取局部最优解嘛,不是最大 ...

  8. 纪念品分组(洛谷-P1094)

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

  9. 洛谷P1169 树上分组背包

    题解 第一次写树上分组背包的题目. 什么是分组背包? 分组背包就是将物品进行分组每组内部只能选择一类物品. for(int i = 1;i <= N;++i){for(int j = 0;j & ...

最新文章

  1. 残差神经网络_什么是残差——一文让你读懂GBDT(梯度提升树)-和-Resnet-(残差网络)的原理...
  2. Windows 7 安装和搜索更新缓慢的解决,新装机常见问题
  3. 有多少用户痛点,你是听回来的,而不是经过深思过后找出来的
  4. 至于你信不信,我反正是信了——以类为单位的编程思想
  5. 工作回报如何影响人的生产力_如何在减少工作的同时提高生产力
  6. c语言怎么算n以内素数,关于求N以内素数的一点小问题(N小于一亿)
  7. dnf服务器延迟怎么看,dnf如何判断自己网络还是服务器出问题_dnf判断自己网络还是服务器出问题详细介绍_游戏堡...
  8. Ndarry/Dataframe使用pytorch转为tensor格式
  9. 游标中的static参数
  10. linux系统开机启动流程
  11. ubuntu下非常好用的PDF阅读器
  12. 解码H264文件的一些基础知识
  13. Mysql函数和存储过程
  14. 环境试验之单臂跌落试验机操作规程
  15. 整合Springboot+BlazeDS+Spring+Flex
  16. 如何优化Flash动画使文件更小播放更流畅
  17. 2017计算机考研统考,2017年计算机考研408统考真题及答案.pdf
  18. GIS三维可视化技术在输电领域的应用研讨
  19. python 从字符串中提取数字
  20. 转发:不懂朗姆酒?那你就out了!

热门文章

  1. Mail服务器的搭建(4)----Web方式的邮件系统
  2. python 面试题(3)--- 进制转换
  3. getter与setter
  4. Redis 多机多节点集群搭建方案(5.0版本)
  5. 会议指南二维码生成_包装和准备技术会议的指南
  6. 设计模式 里氏替换原则
  7. Bootstrap3 工具提示插件的事件
  8. Bootstrap3 带列表组的面板
  9. Bootstrap 下拉菜单
  10. db2设置数据库增量备份_DB2在线增量备份 还原增量备份及前滚恢复