信息学奥赛一本通 1939:【07NOIP普及组】纪念品分组 | P1094 [NOIP2007 普及组] 纪念品分组
【题目链接】
ybt 1939:【07NOIP普及组】纪念品分组
洛谷 P1094 [NOIP2007 普及组] 纪念品分组
【题目考点】
1. 贪心
【解题思路】
贪心选择:选择价格最小的和最大的纪念品分成一组,若价格最小的和最大的纪念品无法
分成一组,那么价格最大的纪念品单独一组。
将问题抽象为:有n个数字,要凑成加和小于等于w的组,一组可以有2个数或1个数,最少可以凑多少组。
1. 贪心选择性质的证明:
贪心选择:
如果最大值加最小值大于w,那么最大值单独一组。
如果最大值加最小值小于等于w,最大最小值凑成一组。
- 证明:存在最优解包含第一次贪心选择
如果第一次选择的组只有最大值,由于最大值无法和其他数字凑成一组,最大值单独一组是唯一的选择。
如果第一次的贪心选择是最大最小值构成的一组。设最大值为lll,最小值为ggg,那么一定有:l+g≤wl+g\le wl+g≤w
假设对于所有最优解,都不包含第一次的贪心选择,也就是说lll和ggg不会分为一组。
lll可以有以下几种情况
- lll单独一组:无论ggg与另一个数字一组,还是ggg单独一组,都可以让ggg更改为与lll一组。
- lll与另一个数字xxx一组,那么有l+x≤wl+x\le wl+x≤w。
假设此时ggg单独一组,那么可以让ggg与xxx交换,得到lll与ggg一组。
假设此时ggg与另一个数字hhh一组,那么有h+g≤wh+g\le wh+g≤w
由于lll是当时的最大值,那么一定有h≤lh\le lh≤l,所以有h+x≤l+x≤wh+x\le l+x\le wh+x≤l+x≤w,hhh与xxx一组加和并不会超过www。 将ggg与xxx交换,lll与ggg一组,hhh与xxx一组,是可行的。
无论什么情况,都可以通过交换使得lll与ggg一组,这样做分组数量不会增加,该方案仍然是最优解,最优解中包含了贪心选择,与假设相悖,原命题得证。
- 证明:进行k次贪心选择后,存在最优解包含第k+1次的贪心选择。
证明方法与证明第1点相似,不再赘述。
2.具体做法:
对所有纪念品按升序排序,设l,r两个指针指向当前看到的价格最小和最大的纪念品。
- 如果第l和第r个纪念品的价格加和大于w,那么第l纪念品单独一组,l加1。
- 如果第l和第r个纪念品的价格加和小于等于w,那么第l和第r纪念品分为一组,l和r都加1。
【题解代码】
解法1:贪心
#include<bits/stdc++.h>
using namespace std;
#define N 30005
int main()
{int p[N], w, n, ct = 0;//ct:组数cin >> w >> n;for(int i = 1; i <= n; ++i)cin >> p[i];sort(p+1, p+1+n);int l = 1, r = n;while(l <= r){if(l != r && p[l] + p[r] <= w){l++;r--;ct++;//l, r凑一组}else{r--;ct++;//r自己凑一组 }}cout << ct;return 0;
}
信息学奥赛一本通 1939:【07NOIP普及组】纪念品分组 | P1094 [NOIP2007 普及组] 纪念品分组相关推荐
- 信息学奥赛一本通 1096:数字统计 | 1949:【10NOIP普及组】数字统计 | OpenJudge NOI 1.5 41
[题目链接] ybt 1096:数字统计 ybt 1949:[10NOIP普及组]数字统计 OpenJudge NOI 1.5 41:数字统计 [题目考点] 1. 分离整数的各位数字 对于数字a,a% ...
- 信息学奥赛一本通 1089:数字反转 | 1953:【11NOIP普及组】数字反转 | OpenJudge NOI 1.5 29 | 洛谷 P1307 [NOIP2011 普及组] 数字反转
[题目链接] ybt 1089:数字反转 ybt 1953:[11NOIP普及组]数字反转 OpenJudge NOI 1.5 29:数字反转 洛谷 P1307 [NOIP2011 普及组] 数字反转 ...
- 信息学奥赛一本通 1098:质因数分解 | 1957:【12NOIP普及组】质因数分解 | OpenJudge NOI 1.5 43 | 洛谷 P1075 [NOIP2012 普及组] 质因数分解
[题目链接] ybt 1098:质因数分解 ybt 1957:[12NOIP普及组]质因数分解 OpenJudge NOI 1.5 43:质因数分解 洛谷 P1075 [NOIP2012 普及组] 质 ...
- 信息学奥赛一本通 1118:铺地毯 | 1863:【11NOIP提高组】铺地毯 | OpenJudge NOI 1.9 14 | 洛谷 P1003 [NOIP2011 提高组] 铺地毯
[题目链接] ybt 1118:铺地毯 ybt 1863:[11NOIP提高组]铺地毯 OpenJudge NOI 1.9 14:铺地毯 洛谷 P1003 [NOIP2011 提高组] 铺地毯 [题目 ...
- 信息学奥赛一本通(C++版)NOIP提高组(1820-1829)
信息学奥赛一本通(C++版)NOIP提高组目录 //1820 [题目描述] 我们可以用这样的方式来表示一个十进制数:将每个阿拉伯数字乘以一个以该数字所 处位置的(值减1)为指数,以10为底数的幂之和的 ...
- 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题
第1章 快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章 素数 第 3 章 约数 第 4 章 同余问题 第 5 章 矩阵乘法 第 6 章 ...
- 信息学奥赛一本通(C++版) 网站补充题目
总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 网站补充题目 http://ybt.ssoier ...
- 信息学奥赛一本通在线提交地址
信息学奥赛一本通 1 C++语言入门 1.1 综合 1.1.1 P1458 地球人口承载力估计 正确: 770 提交: 1794 比率: 42.92 % 1.1.2 P1686 Hello, Worl ...
- 信息学奥赛一本通(C++版) 第二部分 基础算法 第九章 动态规划
总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 第二部分 基础算法 第九章 动态规划 第一节 动 ...
最新文章
- 【转】闲聊Kernel engineer的境界(全)
- json阅读器_Flutter小说阅读器系列一:使用Bloc模式获取起点小说关键字提示
- linux调用堆栈函数,使用 backtrace 获得 Linux 函数调用栈
- centos7抢先安装docker1.0
- PHP截取文件,[转载]php做截取文件后缀名大全
- Jzoj3882 近邻
- 知识库 编号:003
- Java jdk的下载与安装
- poi 操作 PPT,针对 PPTX--表格简单操作
- 关系模型中的3中关系(一对一,一对多,多对多)
- 2021-最新Web前端经典面试试题及答案-史上最全前端面试题(含答案)---JavaScript篇
- 自学平面设计,不能不知道的基础知识点是什么?
- 微信小程序常见问题记录
- IoT通讯技术选型及模型设计的思考
- 用python做一个随机题目生成器
- 晚上失眠白天没精神,怎么把这种状态调整回来!
- MySQL5.6建索引时遇到 Specified key was too long; max key length is 767 bytes错误提示解决办法
- 导数在梯度下降算法中的意义理解
- hihocoder 1272 买零食
- 电气隔离 电源模块 升压/充电 实测案例 150V 30W 带四个220UF电解电容并联 300ms