NOIP2007 普及组 纪念品分组
发布日期:2021-06-30 16:05:05
浏览次数:3
分类:技术文章
本文共 1063 字,大约阅读时间需要 3 分钟。
第一个方法很容易想到,先将n个数从小到大排序,在后面比较大的数选择一个数+最小的数要<=k,当然要满足贪心的要求,足够的接近k,找到了就删除最小的数和这个数,再继续一样的操作,没有找到就可以直接判断结果了,因为剩下的数都是一个数一组的,但是找数可不能直接一个循环查找,n比较大,时间复杂度n^2肯定超时,除非数据不行,所以一般要线性时间或者nlogn才可以,所以使用二分查找logn时间复杂度,但是还要删除数啊,普通数组删除数比较麻烦,所以使用STL的vector,比较方便。
赋代码:
#include#include #include #include using namespace std;vector G;int n,k;void match(int Min){ int r=0; int l=G.size()-1; while(r >1; if(G[tmp]>Min) { if(l!=tmp) l=tmp; else break; } else { if(r!=tmp) r=tmp; else break; } } if(r =r;i--) { if(Min>=G[i]) { G.erase(G.begin()+i); return ; } } else { G.erase(G.begin()+r); }} int main(){ scanf("%d%d",&k,&n); for(int i=0;i k) { cnt++; cnt+=G.size(); break; } match(k-Min); cnt++; } printf("%d\n",cnt); return 0;}
第二个方法,首先以为都是一个数一组,组数=n,再判断最大的数是否可以和最小的的数一个组,不可以就说明,最大的数肯定是单独一个组的,删除最大的数,组数不变,如果可以就删除最大的数和最小的数,组数-1,因为最大的数的组可以删除了。
#include#include using namespace std;int n,k;int ans[31000];int main(){ scanf("%d%d",&k,&n); for(int i=0;i
转载地址:https://kaven.blog.csdn.net/article/details/77921360 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2024年04月15日 12时18分19秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
[10] JMeter-察看结果树,你知道都有哪些功能吗?
2019-05-01
[11] JMeter-结果分析之聚合报告
2019-05-01
[12] JMeter-结果分析之图形图表
2019-05-01
[13] JMeter-详解JMeter参数化之CSV Data Set Config
2019-05-01
[14] JMeter关联-详解JMeter正则表达式提取器
2019-05-01
优化jmeter脚本
2019-05-01
Gradle基础使用总结1
2021-07-04
性能测试场景设置---不同场景下对应的jmeter脚本【不定时补充】
2019-05-01
登录oracle数据库时常用的操作命令整理
2019-05-01
微信小程序实现安卓机下拉不刷新,ios下拉刷新操作(自定义底部tab栏在安卓机下拉)
2019-05-01
小程序动态获取组件高度(自定义Tabbar的高度)
2019-05-01
如何是实现微信会员开卡组件中一个手机号绑定一个微信号(思路篇)
2019-05-01
小程序实现sku商品规格
2019-05-01
js对象的属性用变量值代替
2019-05-01
小程序图片转Base64,方法总结
2019-05-01
element中路由跳转以后激活当前菜单高亮
2019-05-01
VUE中同级页面传参的方式
2019-05-01
微信小程序setData复杂数组的更新、删除、添加、拼接
2019-05-01