当前位置: 首页 > news >正文

XXX2024073105:纪念品分组【c++】

描述

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

输入描述

【输入描述】
输入共 n+2 行:
第 1 行,包括一个整数 w,为每组纪念品价格之和的上限;
第 2 行,为一个整数 n,表示购来的纪念品的总件数;
接下来 n 行,每行一个正整数 Pi 表示所对应纪念品的价格。

输出描述

【输出格式】
输出共1行:
一个整数,即最少的分组数目。

用例输入 1 

 100 990 20 20 30 50 60 70 80 90

用例输出 1 

6

AC CODE

#include <iostream>  
#include <vector>  
#include <algorithm>  using namespace std;  int main() {  int w;  int n;  cin >> w >> n;  vector<int> prices;  for (int i = 0; i < n; ++i) {  int p;  cin >> p;  prices.push_back(p);  }  // 将物品按价格从小到大排序  sort(prices.begin(), prices.end());  int i = 0;  int j = n - 1;  int count = 0;  while (i <= j) {  if (i == j) {  // 剩下一个物品,单独成组  count++;  i++;  } else {  if (prices[i] + prices[j] <= w) {  // 可以配对  count++;  i++;  j--;  } else {  // 不可以配对,只能单独放最大的物品  count++;  j--;  }  }  }  cout << count ;  return 0;  
}  

相关文章:

  • 关于layui select option莫名多一行的问题
  • NodeJS哪些情况下会造成内存泄漏和避免方法
  • 建造者模式Builder Pattern
  • LeetCode HOT 100
  • ShenNiusModularity项目源码学习(34:总结)
  • 每日学习一道数模题-2024国赛E题-交通流量管控
  • React19源码系列之Hooks(useState)
  • C++ 类的知识点
  • 【Docker 05】Container - 容器
  • Spring AI的ChatClient和ChatModel接口
  • Node.js 中的 Token 认证机制详解
  • 动态规划之斐波那契数(一)
  • java 集合 泛型
  • (LeetCode 每日一题) 1432. 改变一个整数能得到的最大差值(贪心)
  • 编译链接实战(30)strip移除了哪些内容
  • JVM 类加载过程/对象创建过程/双亲委派机制/垃圾回收机制
  • 大模型微调(Fine-tuning)概览
  • Vue-Leaflet地图组件开发(四)高级功能与深度优化探索
  • 基于51单片机的温度和液位监测系统(串口传输)
  • Vue 性能优化
  • 猪八戒做网站 纠纷/北京seo网络优化师
  • 郑州高端做网站/我的百度账号
  • 集团网站建设方案书/市场营销公司排名
  • 微网站 html/友链交换网站源码
  • 谁有做开档棉裤的网站啊/网络营销渠道的特点
  • 疫情最新数据消息山西/重庆百度推广关键词优化