洛谷 P1094 纪念品分组【贪心/双指针/最少多少组合法不要求连续的两两捆绑】
题目描述
元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作。为使得参加晚会的同学所获得 的纪念品价值相对均衡,他要把购来的纪念品根据价格进行分组,但每组最多只能包括两件纪念品, 并且每组纪念品的价格之和不能超过一个给定的整数。为了保证在尽量短的时间内发完所有纪念品,乐乐希望分组的数目最少。
你的任务是写一个程序,找出所有分组方案中分组数最少的一种,输出最少的分组数目。
输入输出格式
输入格式:
输入文件group.in包含n+2行:
第1行包括一个整数w,为每组纪念品价格之和的上上限。
第2行为一个整数n,表示购来的纪念品的总件数G
第3~n+2行每行包含一个正整数Pi (5 <= Pi <= w)表示所对应纪念品的价格。
输出格式:
输出文件group.out仅一行,包含一个整数,即最少的分组数目。
输入输出样例
说明
50%的数据满足:1<=n<=15
100%的数据满足:1<=n<=30000,80<=w<=200
【分析】:先升序排序,尽量将最大最小的两个捆绑在一起,设置一前一尾双指针进行移动,直到i>j
【代码】:
#include <bits/stdc++.h> using namespace std; const int N = +;
int lim,n,a[N],cnt;
int main()
{
ios::sync_with_stdio(false);
cin>>lim;
cin>>n;
for(int i=;i<=n;i++)
{
cin>>a[i];
}
sort(a+,a+n+);
cnt=;
int i=,j=n;
while(i<=j)
{
if(a[i]+a[j]>lim)
{
cnt++;
j--;
}
else
{
cnt++;
i++;
j--;
}
}
cout<<cnt<<endl;
return ;
}
//20 20 30 50 60 70 80 90 90 //cnt 0+1+1+1+1+1
// i j
洛谷 P1094 纪念品分组【贪心/双指针/最少多少组合法不要求连续的两两捆绑】的更多相关文章
- 洛谷 P1094 纪念品分组
		P1094 纪念品分组 先按价格对纪念品排序(这里是从大到小),然后从两端向中心开始配对,有两个变量i和j,表示正在处理的两个纪念品编号,开始时i=1,j=n,如果a[i]+a[j]>w则第i贵 ... 
- 洛谷P1094——纪念品分组(简单贪心)
		https://www.luogu.org/problem/show?pid=1094 题目描述 元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作.为使得参加晚会的同学所获得 的纪念品价值相对均 ... 
- [题解]洛谷P1094——纪念品分组
		原题链接: https://www.luogu.org/problem/P1094 题目简述: 有NNN件纪念品,每个纪念品都有特定的价格,要求将他们分组,每组纪念品之和不得超过MMM,并且每组最多只 ... 
- 洛谷——P1094 纪念品分组
		https://www.luogu.org/problem/show?pid=1094#sub 题目描述 元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作.为使得参加晚会的同学所获得 的纪念品价 ... 
- 洛谷P1094纪念品分组 题解
		题目传送门 首先的思路就是贪心.先将所有的纪念品按照价格从低到高进行排序.在分别从左到右.从右到左合并纪念品.如果两端纪念品价格超过了上上限,那么就将较大的那一个纪念品独自放入.否则将两个纪念品一起放 ... 
- 洛谷 P1094 纪念品分类
		刚开始看到这题就确定这题最好先要排序 第一个想法是排好序后先让第一个和从倒数第一个开始相加和如果就 <= w,那么用n除以2或者再加一得出答案,然后发现随便 当w = 110 n = 5序列 ... 
- P1094 纪念品分组
		P1094 纪念品分组 题目描述 元旦快到了,校学生会让乐乐负责新年晚会的纪念品发放工作.为使得参加晚会的同学所获得 的纪念品价值相对均衡,他要把购来的纪念品根据价格进行分组,但每组最多只能包括两件纪 ... 
- 洛谷 P1023 税收与补贴问题 (2000NOIP提高组)
		洛谷 P1023 税收与补贴问题 (2000NOIP提高组) 题意分析 一开始没理解题意.啰啰嗦嗦一大堆.看了别人的题解才明白啥意思. 对于样例来说,简而言之: 首先可以根据题目推算出来 28 130 ... 
- 洛谷 P1109 学生分组
		P1109 学生分组 题目描述 有N组学生,给出初始时每组中的学生个数,再给出每组学生人数的上界R和下界L(L<=R),每次你可以在某组中选出一个学生把他安排到另外一组中,问最少要多少次才可以使 ... 
随机推荐
- 《Cracking the Coding Interview》——第7章:数学和概率论——题目5
			2014-03-20 02:20 题目:给定二维平面上两个正方形,用一条直线将俩方块划分成面积相等的两部分. 解法:穿过对称中心的线会将面积等分,所以连接两个中心即可.如果两个中心恰好重合,那么任意穿 ... 
- USACO Section2.2 Subset Sums 解题报告 【icedream61】
			subset解题报告------------------------------------------------------------------------------------------ ... 
- javascript将分,秒,毫秒转换为xx天xx小时xx秒(任何语言通用,最通俗易懂)
			// 传入参数为总分钟数,如果为秒数,毫秒数,需要对 // 此处得到总秒数 注释部分的代码调整下. function toDateDMS(minutes){ // 将分钟转换为 天,时,分,秒 if( ... 
- 聊聊、SpringBoot 上传文件大小
			#2.0#spring.servlet.multipart.max-file-size=10Mb#spring.servlet.multipart.max-request-size=10Mb #1.3 ... 
- CentOS修改IP地址
			一.CentOS 修改IP地址修改对应网卡的IP地址的配置文件 # vi /etc/sysconfig/network-scripts/ifcfg-eth0 电信 # vi /etc/syscon ... 
- Python数据分析-Pandas(Series与DataFrame)
			Pandas介绍: pandas是一个强大的Python数据分析的工具包,是基于NumPy构建的. Pandas的主要功能: 1)具备对其功能的数据结构DataFrame.Series 2)集成时间序 ... 
- P2857 [USACO06FEB]稳定奶牛分配Steady Cow Assignment
			题目描述 Farmer John's N (1 <= N <= 1000) cows each reside in one of B (1 <= B <= 20) barns ... 
- HITOJ 2739 The Chinese Postman Problem(欧拉回路+最小费用流)
			The Chinese Postman Problem My Tags (Edit) Source : bin3 Time limit : 1 sec Memory limit : 6 ... 
- Dom的深度优先遍历和广度优先遍历
			//深度优先遍历的递归写法 function DFTraversal(node) { var nodes = []; if (node != null) { nodes.push(node); var ... 
- java反射调用私有方法和修改私有属性
			//调用私有方法package com.java.test; public class PrivateMethod { private String sayHello(String name) { r ... 
