璟雯院

珺璟如晔,雯华若锦

用户工具

站点工具


icpc:problems:最小函数值
problems
名称最小函数值
题目编号P2085
题目链接luogu.com.cn/…
来源Luogu
算法分类, 优先队列
难易程度容易

最小函数值

想法

每个函数取正整数部分,所以一定保证所有函数的函数值都是单调递增的。所以将函数的第一个值取出加入堆,使用堆找出最小值,最小值所处的函数自变量增加后重新加入堆。

代码实现

#include<iostream>
#include<queue>
using namespace std;
 
const int N = 10010;
int a[N], b[N], c[N];
 
struct node{
	int x, sit;
	friend bool operator<(const node i, const node j)
	{
		int i_val = a[i.sit] * i.x * i.x + b[i.sit] * i.x + c[i.sit];
		int j_val = a[j.sit] * j.x * j.x + b[j.sit] * j.x + c[j.sit];
		return i_val > j_val;
	}
};
priority_queue<node>qu;
 
int main()
{
	int n, m;
	cin >> n >> m;
	for (int i = 1; i <= n; ++i) 
	{
		cin >> a[i] >> b[i] >> c[i];
		qu.push((node){1, i});
	}
 
	for (int i = 0; i < m; ++i) {
		node now = qu.top();
		qu.pop();
		int val = a[now.sit] * now.x * now.x + b[now.sit] * now.x + c[now.sit];
		cout << val << ' ';
		qu.push((node){now.x+1, now.sit});
	}
 
	return 0;
}
/app/www/public/data/pages/icpc/problems/最小函数值.txt · 最后更改: 2023/02/08 11:09 由 温婕莺