【洛谷 P1094】[NOIP2007 普及组] 纪念品分组 题解(贪心+排序+双指针)

news/2024/7/23 9:35:45 标签: c++, 算法, 开发语言

[NOIP2007 普及组] 纪念品分组

题目描述

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

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

输入格式

n + 2 n+2 n+2 行:

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

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

3 ∼ n + 2 3\sim n+2 3n+2 行每行包含一个正整数 P i P_i Pi 表示所对应纪念品的价格。

输出格式

一个整数,即最少的分组数目。

样例 #1

样例输入 #1

100 
9 
90 
20 
20 
30 
50 
60 
70 
80 
90

样例输出 #1

6

提示

50 % 50\% 50% 的数据满足: 1 ≤ n ≤ 15 1\le n\le15 1n15

100 % 100\% 100% 的数据满足: 1 ≤ n ≤ 3 × 1 0 4 1\le n\le3\times10^4 1n3×104 80 ≤ w ≤ 200 80\le w\le200 80w200 5 ≤ P i ≤ w 5 \le P_i \le w 5Piw


思路

先按价格排序,太贵的单独领出来发,便宜的两件一起发。


AC代码

#include <iostream>
#include <algorithm>
#include <vector>
#define AUTHOR "HEX9CF"
using namespace std;

int main() {
    int w, n;
    int cnt;
    vector<int> v;
    cin >> w >> n;
    for(int i = 0; i < n; i++) {
        int in;
        cin >> in;
        v.push_back(in);
    }
    sort(v.begin(), v.end());
    vector<int>::iterator itl, itr;
    itl = v.begin();
    itr = v.end() - 1;
    while(itl <= itr) {
        if(*itl + *itr > w) {
            // cout << *itr << endl;
            cnt++;
            itr--;
        } else {
            // cout << *itl << " " << *itr << endl;
            itl++;
            itr--;
            cnt++;
        }
    }
    cout << cnt << endl;
    return 0;
}

http://www.niftyadmin.cn/n/5013505.html

相关文章

Shell命令编辑与查找文件

Shell命令编辑与查找文件 编辑文件&#xff1a;使用vim或vi vim和vi的区别 vim和vi命令的使用流程 在编辑器里快速移动 查找文件 如今&#xff0c;Linux 系统的大多数配置仍通过编辑纯文本文件来完成。甚至当使用图形工具处理配置文件时&#xff0c;也无法完全完成使用纯文…

Pushmall推熵平台--对电商未来5年发展趋势分析

电子商务的未来发展趋势分析&#xff1a; **个性化趋势&#xff1a;**个性化信息需求将成为发展方向&#xff0c;提供多样化的、比传统企业更具有个性化的服务&#xff0c;是决定今后企业商务活动成败的关键。 纵深趋势&#xff1a;电子商务基础设施日益完善&#xff0c;支撑环…

Mac电脑使用万能头文件教程(详细)

参考:https://blog.csdn.net/weixin_46522531/article/details/126292477 预计阅读操作时间&#xff1a;5分钟 Mac电脑由于使用的是苹果自己的编译器&#xff0c;很多头文件不支持&#xff0c;像万能头就是其中的一员。万能头可以为我们节省很多时间&#xff0c;减少很多不必要…

进阶测试知识之Concolic Testing (Concrete + Symbolic Testing)

Concolic Testing&#xff08;Concrete Symbolic Testing&#xff09;是一种软件测试方法&#xff0c;结合了具体执行&#xff08;Concrete Execution&#xff09;和符号执行&#xff08;Symbolic Execution&#xff09;两种方法。Concolic Testing 能在不同的输入路径中发现隐…

什么是事务?Spring是通过什么进行事务开发?

当我们谈到“事务”时&#xff0c;通俗地说&#xff0c;它指的是一系列操作&#xff0c;这些操作被视为单个逻辑单元&#xff0c;这些操作必须要么全部完成&#xff0c;要么全部撤回。 一个典型的例子是转账&#xff0c;如果在转账过程中出现了错误&#xff0c;那么这个事务需…

公开游戏、基于有向图的游戏

目录 〇&#xff0c;背景 一&#xff0c;公开游戏、策梅洛定理 1&#xff0c;公开游戏 2&#xff0c;策梅洛定理 二&#xff0c;有向图游戏 1&#xff0c;狭义有向图游戏 2&#xff0c;广义有向图游戏 3&#xff0c;狭义有向图游戏的SG数 4&#xff0c;Bash Game 力扣…

后端入门教程:从零开始学习后端开发

1. 编程基础 首先&#xff0c;作为一名后端开发者&#xff0c;你需要掌握至少一门编程语言。Python是一个很好的选择&#xff0c;因为它易于学习且功能强大。让我们从一个简单的示例开始&#xff0c;在控制台输出 "Hello, World!"。 2. 学习Web基础 了解Web开发基…

XL-LightHouse 与 Flink 和 ClickHouse 流式大数据统计系统

一个Flink任务只能并行处理一个或少数几个数据流&#xff0c;而XL-LightHouse一个任务可以并行处理数万个、几十万个数据流&#xff1b; 一个Flink任务只能实现一个或少数几个数据指标&#xff0c;而XL-LightHouse单个任务就能支撑大批量、数以万计的数据指标。 1、XL-LightHo…