博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
1143 纪念品分组 2007年NOIP全国联赛普及组
阅读量:6803 次
发布时间:2019-06-26

本文共 1528 字,大约阅读时间需要 5 分钟。

1143 纪念品分组

 

2007年NOIP全国联赛普及组

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 白银 Silver
 查看运行结果
 
 
题目描述 
Description

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

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

输入描述 
Input Description

包含n+2行:

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

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

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

输出描述 
Output Description

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

样例输入 
Sample Input

100

9

90

20

20

30

50

60

70

80

90

样例输出 
Sample Output

6

数据范围及提示 
Data Size & Hint

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

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

分类标签 Tags 

 将物品按从小到大排序

双向扫描

如果从前往后和从后往前的相加小于最大值

就把他们归为一类

1 #include
2 #include
3 #include
4 using namespace std; 5 const int MAXN=300001; 6 int a[MAXN]; 7 int main() 8 { 9 int w,n;10 scanf("%d%d",&w,&n);11 for(int i=1;i<=n;i++)12 {13 scanf("%d",&a[i]);14 }15 sort(a+1,a+n+1);16 int tot=0;17 for(int i=1;i<=n;i++)18 {19 if(a[i]==-1)20 continue;21 int p=a[i];22 int flag=0;23 for(int j=n;j>=1;j--)24 {25 if(a[j]+p<=w&&a[j]!=-1)26 {27 a[j]=-1;28 a[i]=-1;29 tot++;30 flag=1;31 break;32 }33 }34 if(flag==0)35 {36 tot++;37 a[i]=-1; 38 }39 }40 printf("%d",tot);41 return 0;42 }

 

转载地址:http://jijwl.baihongyu.com/

你可能感兴趣的文章
springmvc 自定义拦截器
查看>>
Linux中内存挂载到目录下
查看>>
【转】MyEclipse 9.0正式版官网下载(附Win+Llinux激活方法、汉化包)
查看>>
HDU 5794 - A Simple Chess
查看>>
Topology and Geometry in OpenCascade-Vertex
查看>>
Create views of OpenCASCADE objects in the Debugger
查看>>
解决Android版Firefox字体显示过大的问题
查看>>
使用new Vue实例的 components 属性定义 私有组件 login
查看>>
[C++]一份Linq to object的C++实现
查看>>
Linux相关的入门命令
查看>>
Android 关于ijkplayer
查看>>
LVS介绍与部署
查看>>
【Lolttery】项目开发日志 - (三)维护好一个项目好难
查看>>
数据库面试题
查看>>
C#的OpenFileDialog和SaveFileDialog的常见用法(转)
查看>>
(转)详解C#中的反射
查看>>
超简单将Centos的yum源更换为国内的阿里云源
查看>>
(转)返回顶部的js实现(jQuery/MooTools)
查看>>
十大最值得关注的国内大数据分析厂商
查看>>
Flask 学习 六 大型程序结构
查看>>