首页 > 其他分享 >蓝桥杯

蓝桥杯

时间:2024-04-08 11:02:08浏览次数:24  
标签:node increase pq int Node 蓝桥 增量

1.题目

2.题解

2.1 贪心 + 堆

思路

由于如下图公式所示:

  1. 要获取的是最大值(最坏情况), 故如果increase增量小于零则没有必要讨论(存在刚开始由于b较大使得增量大于零,而k小于0,后面由于x增大导致增量为负值)
  2. 可利用贪心局部最优(每次选择加人时,均是选择增量最大的一组),实现全局最优(最大值)
  3. 为了方便每次取最大值,选择使用大根堆自动排序,每次只要取顶部值即可
  4. 计算得到每次增量和各个参数的关系: increase = k + b (x=1) / ((x+1)k + b)(x+1) - (xk + b)x = k(2x+1) + b; (x>1)

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long 
struct Node {
	int k, b, x, increase;
	Node(int k, int b, int x, int increase) : k(k), b(b), x(x), increase(increase){}
	bool operator <(const Node& other) const{
		return increase < other.increase;
	}
};
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	
	int n, m;
	cin >> n >> m;
	priority_queue<Node> pq;
	for (int i = 0; i < m; i++){
		Node node(0,0,0,0);
		cin >> node.k >> node.b;
		node.increase = node.k + node.b;
		// 初始化,计算初次所有利润大于 0的(便于第一次选择), 利用大根堆性质增幅最大的放在顶部(贪心,局部最优获取全局最优) 
		if(node.k + node.b > 0){
			node.x = 1;
			pq.push(node);
		}
	}
	
	ll money = 0; 
	for (int person = 0; person < n && !pq.empty(); person++){
		Node node = pq.top();
		pq.pop();
		money += node.increase;
		// 下一次的增幅, ((x+1)*k + b)(x+1) - (x*k + b)x = k(2x+1) + b;  
		node.increase =  (2*node.x + 1) * node.k + node.b;
		if(node.increase > 0){
			node.x += 1;
			pq.push(node);
		} 
	}
	
	cout << money;
	return 0; 
} 

标签:node,increase,pq,int,Node,蓝桥,增量
From: https://www.cnblogs.com/trmbh12/p/18120660

相关文章

  • P9232 [蓝桥杯 2023 省 A] 更小的数
    暴力直接暴力枚举区间,并且逐个判断#include<iostream>#include<stdio.h>#include<algorithm>#include<string.h>#include<string>#include<cmath>#defineR(x)x=read()#defineFor(i,j,n)for(inti=j;i<=n;++i)using......
  • 蓝桥杯-算法赛第9场强者:贝贝的2.0
    题意:n个节点的有根树,问孩子节点最少是多少,可以满足任意两条长度为k的链有公共节点。思路:一开始想的是以根为中间点,然后构造边。但是发现样例过不了,样例说的很清楚,根节点也作为一个叶子节点去构造,然后把叶子节点作为中间点(这样可以省去一个叶子节点的计数)。最后就是如何处理的问题......
  • 2023年蓝桥杯省赛——买二赠一
    目录题目链接:1.买二赠一-蓝桥云课(lanqiao.cn)题目描述输入格式输出格式样例输入样例输出样例说明思路队列+贪心代码实现总结题目链接:1.买二赠一-蓝桥云课(lanqiao.cn)题目描述        某商场有N件商品,其中第i件的价格是Ai。现在该商场......
  • 蓝桥杯嵌入式2023年第十四届省赛主观题解析
    1 题目2 代码/*Includes------------------------------------------------------------------*/#include"main.h"#include"adc.h"#include"rtc.h"#include"tim.h"#include"gpio.h"/*Privateinclud......
  • 蓝桥杯练习系统(算法训练)ALGO-963 转圈游戏
    资源限制内存限制:128.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s问题描述n个小伙伴(编号从0到n-1)围坐一圈玩游戏。按照顺时针方向给n个位置编号,从0到n-1。最初,第0号小伙伴在第0号位置,第1号小伙伴在第1号位置,……,依此类推。游戏规......
  • 蓝桥杯练习系统(算法训练)ALGO-962 积木大赛
    资源限制内存限制:128.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s问题描述THU幼儿园举办了一年一度的“积木大赛”。今年比赛的内容是搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成,第i块积木的最终高度需要是hi。在搭建开始......
  • 蓝桥杯—DS1302
    目录1.管脚2.时序&官方提供的读写函数3.如何使用读写函数4.如何在数码管中显示在DS1302中读取出的数据?1.管脚2.时序&官方提供的读写函数/* # DS1302代码片段说明 1. 本文件夹中提供的驱动代码供参赛选手完成程序设计参考。 2. 参赛选手可以自行编写相关代码或......
  • 螺旋矩阵(蓝桥杯-Python)
    importosimportsys#请在此输入您的代码n,m=input().split()n=int(n)m=int(m)arr=[[0forjinrange(m)]foriinrange(n)]r,c=input().split()r=int(r)c=int(c)defdo_l():globaln,m,r,c,arr#四个方向#右下左上......
  • FQQQ的蓝桥杯
    蓝桥杯15届备战Day213届蓝桥杯省赛文章目录蓝桥杯15届备战Day2前言主观题程序设计1.CUBEMAX配置2.代码部分(分享思路和简单实现任务)总结前言备战蓝桥杯嵌入式,刷题第二天,对象为13届蓝桥杯省赛题工程代码在此网盘提取码:xrpg提示:以下是本篇文章正文内容,下面案......
  • 【每周例题】蓝桥杯 C++ 鸡哥的蛋糕大作战
    鸡哥的蛋糕大作战题目鸡哥的蛋糕大作战 题目分析1.使用一个for循环遍历全数,寻找最大洞的数2.使用一个while进行数位拆分,寻找洞的数量3.使用if从两个条件寻找最大洞的最小数符合最大洞的数洞数相同中的最小数代码#include<iostream>#include<bits/stdc++.h>using......