解题思路:先接受数据,将对应数量的纪念品价值进行从小到大排序,再利用双指针法进行分组计数,左右指针指向纪念品价值之和不大于上限时,左指针右移,右指针左移,否则只移动右指针将右边的纪念品单独分为一组,每次记录分组数目,最后输出即为结果
注意事项:注意要先正向排序,不要忘了这个
参考代码:
shangxian=int(input())
jianshu=int(input())
congxiaodaoda=[]
for i in range(jianshu):
a=int(input())
congxiaodaoda.append(a)
congxiaodaoda.sort(reverse=False)#先从小到大排一遍
fenzu=0
left=0
right=len(congxiaodaoda)-1
while left<=right:#注意是小于等于
if congxiaodaoda[left]+congxiaodaoda[right]<=shangxian:
left+=1
right-=1
else:
right-=1
fenzu+=1
print(fenzu)
0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复