解题思路:先接受数据,将对应数量的纪念品价值进行从小到大排序,再利用双指针法进行分组计数,左右指针指向纪念品价值之和不大于上限时,左指针右移,右指针左移,否则只移动右指针将右边的纪念品单独分为一组,每次记录分组数目,最后输出即为结果

注意事项:注意要先正向排序,不要忘了这个

参考代码:

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.0分

2 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 1 条评论

6月前 回复TA
为啥我这边显示时间超限了