【寒假任务】 洛谷1094 纪念品分组
来源:互联网 发布:免费seo外链发布工具 编辑:程序博客网 时间:2024/05/05 17:16
问题描述
元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作。为使得参加晚会的同学所获得 的纪念品价值相对均衡,他要把购来的纪念品根据价格进行分组,但每组最多只能包括两件纪念品, 并且每组纪念品的价格之和不能超过一个给定的整数。为了保证在尽量短的时间内发完所有纪念品,乐乐希望分组的数目最少。
你的任务是写一个程序,找出所有分组方案中分组数最少的一种,输出最少的分组数目。
输入
第1行包括一个整数w,为每组纪念品价格之和的上上限。
第2行为一个整数n,表示购来的纪念品的总件数G
第3~n+2行每行包含一个正整数Pi (5 <= Pi <= w)w表示所对应纪念品的价格。
输出
包含一个整数,即最少的分组数目。
样例输入
100
9
90
20
20
30
50
60
70
80
90
样例输出
6
算法讨论
先从大到小排序,拿最大的加最小的,标记,不行就拿第二大的,以此类推,最后把没标记的加上。有个小优化,若不管怎样都无法再组合了,那就不用再找了,直接退出。
const maxn=30000;var a:array[1..maxn] of longint; f:array[1..maxn] of boolean; i,j,n,s,w:longint; flag:boolean;procedure qsort(l,r:longint);var i,j,m,t:longint;begin i:=l; j:=r; m:=a[(l+r) div 2]; repeat while a[i]>m do inc(i); while a[j]<m do dec(j); if i<=j then begin t:=a[i]; a[i]:=a[j]; a[j]:=t; inc(i); dec(j) end; until i>j; if l<j then qsort(l,j); if i<r then qsort(i,r)end;begin read(w); read(n); for i:=1 to n do read(a[i]); qsort(1,n); for i:=n downto 1 do begin flag:=false; for j:=1 to i-1 do if (f[j]=false) and (a[i]+a[j]<=w) and (i<>j) then begin f[j]:=true; f[i]:=true; flag:=true; inc(s); break end; if flag=false then break end; for i:=1 to n do if f[i]=false then inc(s); write(s)end.
Pixiv ID:61481273
0 0
- 【寒假任务】 洛谷1094 纪念品分组
- 洛谷1094纪念品分组
- 纪念品分组-洛谷 1094
- 洛谷 1094 纪念品分组 贪心
- 寒假篇9——纪念品分组
- 洛谷 P1094 纪念品分组
- 洛谷 P1094 纪念品分组
- 洛谷P1094 纪念品分组
- 洛谷 P1094 纪念品分组
- 【贪心】洛谷 P1094 纪念品分组
- 洛谷 1094——纪念品分组(贪心)
- 纪念品分组
- 纪念品分组
- 纪念品分组
- 纪念品分组
- 纪念品分组
- 纪念品分组
- 纪念品分组
- 论网站体验之必备--稳定的服务器
- GOF设计模式-状态模式
- swift 面向协议的网络框架设计
- Spark 相似度算法
- python将整形随机数转换成字符串
- 【寒假任务】 洛谷1094 纪念品分组
- 设计包含min函数的栈
- 对于刚找工作的程序员,我们该如何选择高工资与学习机会?
- python3-多线程
- 数据库调优笔记
- [转]程序员伤不起的 30 岁
- Android 服务端返回的数据含有html字段时的解析方式
- nyoj 1237(第八届河南省acm省赛题目)
- CSU 1100 一二三