前言
本刷题系列是我为了蓝桥杯前几天可以再系统性思考一下真题所做,所以部分内容会很简洁。如果能够帮助到你,我也会很开心!!
贪心
知识点
备战蓝桥杯第四模块之贪心-CSDN博客
题目一
思路
输入部分:
每行输入两个数据,可以考虑用pair或者是结构体来进行输入
vector<pair<int, int>> q;
q.push_back(make_pair(x,i));
做题部分:
先按照代价从小到大的部分进行排序,在输入过程中,新开数组记录输入的数据,因为每个数字出现的个数是有限制的,从头开始依次遍历,如果输入数据的次数大于了该有的次数,就直接加上该位置的代价,次数减少一
题目二
思路
优先队列+贪心
首先需要看看参加的人是不是大于阈值可以免费进,然后把不是免费进的弄到优先队列中,按从大到小依次相加
是不是大于阈值
题目三
思路:
每次选择最小的两个数相加,可以思考优先队列
规律
题目一
思路:
直接判断该点下一层的可能左边界和可能右边界
左边界不能朝过结点总数
右边界有两种情况,超过结点总数/没超过结点总数,超过结点总数说明右边界就为结点n
总结
1.选择最小两个数相加,用优先队列
int i=pq.top();
pq.pop();
int j=pq.top();
pq.pop();
pq.push(i+j);
sum+=i+j;
2.判断该点下一层的左边界和右边界
L = (L - 1) * m + 2;
R = R * m + 1;