【洛谷贪心算法题】P1094纪念品分组

该题运用贪心算法,核心思想是在每次分组时,尽可能让价格较小和较大的纪念品组合在一起,以达到最少分组的目的。
在这里插入图片描述

【算法思路】

  1. 输入处理:首先读取纪念品的数量n和价格上限w,然后依次读取每件纪念品的价格,并将其存储在容器vector中

  2. 排序:使用 sort 函数对纪念品的价格进行从小到大的排序。排序的目的是方便后续使用双指针法,能快速找到价格最小和最大的纪念品。

  3. 双指针初始化:初始化两个指针 left 和 right,分别指向价格最小和最大的纪念品。同时,初始化分组数量 groups 为 0。

  4. 分组过程:
    ◦ 当 left 小于等于 right 时,进入循环:
    ◦ 如果 left 等于 right,说明只剩下一个纪念品,将分组数量加 1 并跳出循环。
    ◦ 如果价格最小和最大的纪念品价格之和不超过价格上限 w ,则将它们分为一组,left 指针右移一位,right 指针左移一位,分组数量加 1。
    ◦ 如果价格最小和最大的纪念品价格之和超过价格上限 w ,则将价格最大的纪念品单独分为一组,right 指针左移一位,分组数量加 1。

  5. 输出结果:循环结束后,输出分组的数量。

【代码示例】

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;int main() {int w, n;// 读取每组纪念品价格上限 w 和纪念品数量 ncin >> w;cin >> n;// 使用 n 来初始化 vector 的大小vector<int> P(n);// 读取每个纪念品的价格for (int i = 0; i < n; i++) {cin >> P[i];}// 对纪念品价格从小到大排序sort(P.begin(), P.end());// 双指针法分组int left = 0;int right = n - 1;// 初始化分组数量为 0int groupCount = 0;while (left <= right) {if (left == right) {// 若只剩一个纪念品,单独成一组groupCount += 1;break;}if (P[left] + P[right] <= w) {// 若最小和最大价格的纪念品能分在一组groupCount += 1;left += 1;right -= 1;} else {// 若不能,最大价格的纪念品单独成一组right -= 1;groupCount += 1;}}// 输出最少的分组数量cout << groupCount << endl;return 0;
}

注意:

双指针一般是整数类型的索引,而非指针类型

②使用 n 来初始化 vector 的大小

③将groupCount初始化为0,避免未定义行为

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/25176.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Azure 架构师学习笔记】- Terraform创建Azure 资源

本文属于【Azure 架构师学习笔记】系列。 前言 在实际的企业环境中&#xff0c;很少甚至可以说禁止手动创建资源&#xff0c;因为很容易出错&#xff0c;并且大规模部署时会非常低效。因此大部分企业都会使用工具或者某些服务来实现这种可控&#xff0c;可复用&#xff0c;具有…

JavaAPI(线程)

线程简介 进程&#xff08;Process&#xff09; 进程&#xff0c;是正在运行的程序实例&#xff0c;是操作系统进行资源分配的最小单位。 每个进程都有它自己的地址空间和系统资源&#xff08;比如CPU时间&#xff0c;内存空间&#xff0c;磁盘IO等&#xff09;。 多个进程…

冯诺依曼体系结构 ──── linux第8课

目录 冯诺依曼体系结构 关于冯诺依曼&#xff0c;必须强调几点&#xff1a; 冯诺依曼体系结构 我们常见的计算机&#xff0c;如笔记本。我们不常见的计算机&#xff0c;如服务器&#xff0c;大部分都遵守冯诺依曼体系 输入单元&#xff1a;包括键盘, 鼠标&#xff0c;网卡,扫…

7.1 线性代数进行图像处理

一、图像的奇异值分解介绍 A A A 的奇异值定理就是 A T A A^TA ATA 和 A A T AA^T AAT 的特征值定理。 这是本章的内容的预览。 A A A 有两个奇异向量的集合&#xff08; A T A A^TA ATA 和 A A T AA^T AAT 的特征向量&#xff09;&#xff0c;有一个是正奇异值的集合&#…

Java 大视界 -- Java 大数据在智慧环保污染源监测与预警中的应用(104)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

「慢思考」机理分析:从雪球误差到正确推理概率

在大语言模型&#xff08;LLMs&#xff09;的发展历程中&#xff0c; Scaling Laws [1] 一直是推动性能提升的核心策略。研究表明&#xff0c;随着模型规模和训练数据的增长&#xff0c;LLMs 的表现会不断优化 [2]。然而&#xff0c;随着训练阶段规模的进一步扩大&#xff0c;性…

面试问题——如何解决移动端1px 边框问题?

面试问题——如何解决移动端1px 边框问题&#xff1f; 最近&#xff0c;不少小伙伴向我反映&#xff0c;他们在面试中频繁被问到关于1px边框的问题。这个看似老生常谈的话题&#xff0c;没想到在面试中的出现率依然这么高&#xff0c;着实让我有些意外。对于那些对这个问题感到…

全星研发项目管理APQP软件系统:汽车电子与半导体行业的研发管理利器

全星研发项目管理APQP软件系统&#xff1a;汽车电子与半导体行业的研发管理利器 1. 集成化管理优势 1.1 数据一致性 无缝数据流转&#xff1a;集成平台确保数据在不同模块间无缝流转&#xff0c;避免因工具切换导致的数据错误和重复工作。案例&#xff1a;某汽车电子企业使用…

Cascadeur 技术浅析(二):物理模拟

Cascadeur 的物理模拟算法是其核心功能之一,旨在通过模拟真实世界的物理规律,使角色动画更加自然和逼真。 1. 刚体动力学(Rigid Body Dynamics) a. 基本原理 刚体动力学用于模拟角色的骨骼和关节运动,假设角色的每个部分都是刚体(即不会发生形变的物体)。通过应用牛顿…

点云处理入门--PointNetPointNet++论文与代码详解

基础知识 点云数据&#xff1a; 点云是一种通过三维扫描设备或计算机图形学技术获取的三维空间数据&#xff0c;通常由一系列点组成&#xff0c;每个点包含其在三维空间中的坐标&#xff08;如 x,y,z&#xff09;&#xff0c;有时还可能包含颜色、强度等附加信息。 介绍几种常…

Tomcat介绍

Tomcat是Apache 软件基金会&#xff08;Apache Software Foundation&#xff09;的Jakarta 项目中的一个核心项目&#xff0c;由Apache、Sun 和其他一些公司及个人共同开发而成。最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现&#xff0c;因为Tomcat 技术先进、性能稳定&…

DeepSeek-R1-Zero:基于基础模型的强化学习

注&#xff1a;此文章内容均节选自充电了么创始人&#xff0c;CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》&#xff08;人工智能科学与技术丛书&#xff09;【陈敬雷编著】【清华大学出版社】 文章目录 DeepSeek大模型技术系列四DeepSeek大模型技术系列四》DeepSeek-…

Redis初识

Redis是什么 Redis是一个在内存中存储数据的中间件&#xff0c;它可以用于作为数据库&#xff0c;用于作为数据的缓存&#xff0c;市面上作为数据缓存的不止Redis一家&#xff0c;但为啥我们要学习Redis呢&#xff1f;因为Redis有一些特性和优点&#xff0c;让Reids在市面上脱…

DeepSeek今日连开3源!针对优化的并行策略,梁文锋本人参与开发

DeepSeek开源周第四天&#xff0c;直接痛快「1日3连发」&#xff0c;且全都围绕一个主题&#xff1a; 优化并行策略。 DualPipe&#xff1a;一种创新的双向流水线并行算法&#xff0c;能够完全重叠前向和后向计算-通信阶段&#xff0c;并减少“流水线气泡”。它通过对称的微批…

打印九九乘法表

打印九九乘法表 package struct; ​ public class ForDemo04 {public static void main(String[] args) { ​for (int i 1; i < 9; i) {//System.out.println(1"*"i""(1*i));for (int j 1; j < i; j) {System.out.print(i"*"j"&qu…

机器学习的起点:线性回归Linear Regression

机器学习的起点&#xff1a;线性回归Linear Regression 作为机器学习的起点&#xff0c;线性回归是理解算法逻辑的绝佳入口。我们从定义、评估方法、应用场景到局限性&#xff0c;用生活化的案例和数学直觉为你构建知识框架。 回归算法 一、线性回归的定义与核心原理 定义&a…

DeepSeek 提示词:常见指令类型

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

查询NFT图片地址

前言 有人给我发了nft&#xff0c;但是没有图片&#xff0c;我就很纳闷为什么&#xff0c;所以想一探究竟 解决思路 先说下环境吧 Sepolia 测试网 metamask钱包 需要获取nft的合约地址和token id 钱包内 nft可以查得到 思路&#xff1a; 我的理解就是ERC721有标准的…

一个滑块可变色的Seekbar

因项目需要&#xff0c;做一个如下图的滑动条&#xff0c;要求如下&#xff1a; 1、滑块跟着进度条改变颜色 2、滑块有白色边和内部颜色组成 大体思路&#xff0c;就是背景需要UI按照需求提供&#xff0c;然后变色时&#xff0c;根据滑动回调动态设置对应的颜色。 直接上代码…

重大更新!锂电池剩余寿命预测新增 CALCE 数据集

往期精彩内容&#xff1a; 单步预测-风速预测模型代码全家桶-CSDN博客 半天入门&#xff01;锂电池剩余寿命预测&#xff08;Python&#xff09;-CSDN博客 超强预测模型&#xff1a;二次分解-组合预测-CSDN博客 VMD CEEMDAN 二次分解&#xff0c;BiLSTM-Attention预测模型…