
纪念品分组
发布日期:2022-02-08 04:20:45
浏览次数:1
分类:技术文章
本文共 788 字,大约阅读时间需要 2 分钟。
元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作。为使得参加晚会的同学所获得的纪念品价值相对均衡,他要把购来的纪念品根据价格进行分组,但每组最多只能包括两件纪念品, 并且每组纪念品的价格之和不能超过一个给定的整数。为了保证在尽量短的时间内发完所有纪念品,乐乐希望分组的数目最少。
你的任务是写一个程序,找出所有分组方案中分组数最少的一种,输出最少的分组数目。
输入格式
输入包含 n+2n+2 行。
第 11 行包括一个整数 w(80 \leq w \leq 200)w(80≤w≤200),为每组纪念品价格之和的上限。
第 22 行为一个整数 n(1\leq n \leq 3\times 10^4)n(1≤n≤3×104),表示购来的纪念品的总件数。
第 33 至第 n+2n+2 行每行包含一个正整数 P_i (5 \leq P_i \leq w)Pi(5≤Pi≤w)表示所对应纪念品的价格
#include<bits/stdc++.h>
using namespace std; #define N 30002 int main () { int n,s,c; int w,a[N],j=1,bo[N]={0},sum=0; cin>>w; cin>>n; memset(bo,0,sizeof(bo)); for(int i=0;i<n;i++){ cin>>a[i]; } sort(a,a+n); for(s=0;s<n;s++){ for(c=n-1;c>=0;c--){ if(a[s]+a[c]<=w&&!bo[s]&&!bo[c]){ bo[s]=1; bo[c]=1; sum++; } } } for(int i=0;i<n;i++){ if(bo[i]==0){ sum++; } } cout<<sum<<endl; return 0; }转载地址:https://blog.csdn.net/weixin_38960774/article/details/79370133 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
感谢大佬
[***.8.128.20]2023年08月30日 11时29分50秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
高德地图基础使用教程(附demo)
2019-03-07
使用 node 和 socket 实现在线聊天室
2019-03-07
设置定时器和清除定时器的最佳方案
2019-03-07
Element-ui 对话框el-dialog点击关闭事件处理
2019-03-07
前端通过Vue自己实现输入框模糊筛选数据,并将筛选结果展示
2019-03-07
Vue实现移动端APP的方格布局横向滑动翻页带滚动条
2019-03-07
Vue.js页面跳转后返回上一页面记录上一页面select选定的值
2019-03-07
Mybatis-Plus实现分页
2019-03-07
踩坑记录(四)本地连接服务器宝塔面板数据库连不上去
2019-03-07
踩坑记录(五) 时间戳出问题
2019-03-07
Docker简介与安装
2021-05-10
Docker常用命令
2019-03-07
Linux如何关闭某个被占用的端口
2019-03-07
Nginx入门
2019-03-07
如何批量修改照片后缀名
2019-03-07
使用Nginx反向代理将自己的域名指向自己所发布的项目
2019-03-07
Redis入门教学
2019-03-07
个人的spring面试总结
2019-03-07
Spring MVC的跨域访问
2019-03-07
Spring MVC 拦截器
2019-03-07